From b90578ff1c43d387c7e9871aa471a978ec72f11b Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Mon, 28 Jul 2014 10:00:28 +0200 Subject: use latest git for uClibc --- toolchain/uclibc/patches/uclibc-git-20140613.patch | 136100 ----------------- toolchain/uclibc/patches/uclibc-git-20140626.patch | 137757 ++++++++++++++++++ 2 files changed, 137757 insertions(+), 136100 deletions(-) delete mode 100644 toolchain/uclibc/patches/uclibc-git-20140613.patch create mode 100644 toolchain/uclibc/patches/uclibc-git-20140626.patch (limited to 'toolchain/uclibc') diff --git a/toolchain/uclibc/patches/uclibc-git-20140613.patch b/toolchain/uclibc/patches/uclibc-git-20140613.patch deleted file mode 100644 index 725bf8cda..000000000 --- a/toolchain/uclibc/patches/uclibc-git-20140613.patch +++ /dev/null @@ -1,136100 +0,0 @@ -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-06-02 17:40:33.670710081 +0200 -@@ -0,0 +1,110 @@ -+.\" $OpenBSD: arc4random.3,v 1.19 2005/07/17 08:50:55 jaredy Exp $ -+.\" -+.\" Copyright 1997 Niels Provos -+.\" 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 -+.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-06-02 17:40:33.670710081 +0200 -@@ -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-06-02 17:40:33.722710369 +0200 -@@ -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 - 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-06-02 17:40:33.722710369 +0200 -@@ -10,42 +10,48 @@ - #include - #include - #include -+#include - #include - #include -+#include - --#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] \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 New config with default defined in \n"); -+ printf(" --savedefconfig Save the minimal current configuration to \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] \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 New config with default defined in \n"); -+ printf(" -S, --savedefconfig Save the minimal current configuration to \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-06-02 17:40:33.722710369 +0200 -@@ -5,24 +5,27 @@ - - #include - #include -+#include - #include -+#include - #include - #include - #include - #include - #include --#include - --#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-06-02 17:40:33.726710391 +0200 -@@ -7,15 +7,13 @@ - #include - #include - --#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-06-02 17:40:33.726710391 +0200 -@@ -10,7 +10,9 @@ - extern "C" { - #endif - -+#include - #include -+#include "list.h" - #ifndef __cplusplus - #include - #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-06-02 17:40:33.726710391 +0200 -@@ -10,6 +10,7 @@ - # include - #endif - -+#include - #include "lkc.h" - #include "images.c" - -@@ -22,7 +23,6 @@ - #include - #include - #include --#include - - //#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-06-02 17:40:33.726710391 +0200 -@@ -1,11 +1,10 @@ - -- - - - - - True -- Gtk uClibc Configurator -+ Gtk uCLibc Configurator - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False -@@ -190,26 +189,40 @@ - - - -- -+ -+ True -+ Show normal options -+ Show normal options -+ True -+ True -+ -+ -+ -+ -+ -+ - True - Show all options - Show all _options - True - False -- -+ set_option_mode1 -+ - - - - -- -+ - True -- Show masked options -- Show _debug info -+ Show all options with prompts -+ Show all prompt options - True - False -- -+ set_option_mode1 -+ - - -+ - - - -@@ -547,7 +560,7 @@ - True - False - False -- True -+ False - - - -@@ -582,7 +595,7 @@ - True - False - False -- True -+ False - - - -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-06-02 17:40:33.722710369 +0200 -@@ -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-06-02 17:40:33.726710391 +0200 -@@ -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" -+ 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" ["if" ] - 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] - - - "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" - - 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 --#include --#include -- --#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 --} -Binärdateien uClibc-0.9.33.2/extra/config/kconfig-to-uclibc.patch.gz und uClibc-git/extra/config/kconfig-to-uclibc.patch.gz sind verschieden. -Binärdateien uClibc-0.9.33.2/extra/config/kconfig-to-uclibc.tar.gz und uClibc-git/extra/config/kconfig-to-uclibc.tar.gz sind verschieden. -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-06-02 17:40:33.726710391 +0200 -@@ -7,7 +7,6 @@ - #include - #include - --#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 --#include --#include --#include -- --/* end standard C headers. */ -- --/* flex integer type definitions */ -- --#ifndef FLEXINT_H --#define FLEXINT_H -- --/* C99 systems have . 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 --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 -- * Released under the terms of the GNU GPL v2.0. -- */ -- --#include --#include --#include --#include --#include -- --#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 --#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 : ""; --} -- -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-06-02 17:40:33.726710391 +0200 -@@ -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-06-02 17:40:33.726710391 +0200 -@@ -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-06-02 17:40:33.726710391 +0200 -@@ -1,28 +1,40 @@ -+#include - - /* 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-06-02 17:40:33.746710502 +0200 -@@ -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-06-02 17:40:33.726710391 +0200 -@@ -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=""' -- elif [ -f /usr/include/ncursesw/curses.h ]; then -- echo '-I/usr/include/ncursesw -DCURSES_LOC=""' -+ if [ -f /usr/include/ncursesw/curses.h ]; then -+ echo '-I/usr/include/ncursesw -DCURSES_LOC=""' -+ echo ' -DNCURSES_WIDECHAR=1' - elif [ -f /usr/include/ncurses/ncurses.h ]; then - echo '-I/usr/include/ncurses -DCURSES_LOC=""' - elif [ -f /usr/include/ncurses/curses.h ]; then -- echo '-I/usr/include/ncurses -DCURSES_LOC=""' -+ echo '-I/usr/include/ncurses -DCURSES_LOC=""' - elif [ -f /usr/include/ncurses.h ]; then - echo '-DCURSES_LOC=""' - 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-06-02 17:40:33.746710502 +0200 -@@ -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-06-02 17:40:33.746710502 +0200 -@@ -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-06-02 17:40:33.746710502 +0200 -@@ -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-06-02 17:40:33.746710502 +0200 -@@ -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-06-02 17:40:33.746710502 +0200 -@@ -19,8 +19,13 @@ - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -+#include -+ - #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-06-02 17:40:33.746710502 +0200 -@@ -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-06-02 17:40:33.722710369 +0200 -@@ -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-06-02 17:40:33.722710369 +0200 -@@ -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-06-02 17:40:33.746710502 +0200 -@@ -15,20 +15,19 @@ - #include - #include - #include -+#include - #include - #include - --#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 .\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 and cursor keys will cycle between ,\n" +-" and \n" ++" and .\n" + "\n" + "o To get help with an item, use the cursor keys to highlight \n" +-" and Press .\n" ++" and press .\n" + "\n" + " Shortcut: Press or .\n" + "\n" ++"o To toggle the display of hidden options, press .\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 and for those\n" +-" who are familiar with less and lynx.\n" ++" keys h,j,k,l function here as do , , and for \n" ++" those who are familiar with less and lynx.\n" + "\n" +-"o Press , , or to exit.\n" ++"o Press , , , or 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. " +- " selects submenus --->. " ++ " selects submenus ---> (or empty submenus ----). " + "Highlighted letters are hotkeys. " +- "Pressing selectes a feature, while will exclude a feature. " ++ "Pressing includes, excludes, modularizes features. " + "Press to exit, for Help, for Search. " +- "Legend: [*] feature is selected [ ] feature is excluded"), ++ "Legend: [*] built-in [ ] excluded 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 ( [=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 ( [=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 : _(""), +- 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 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" +- " 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-07-25 20:36:04.861324498 +0200 +@@ -3,12 +3,15 @@ + * Released under the terms of the GNU GPL v2.0. + */ + ++#include ++#include + #include + #include + +-#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 : _(""), ++ 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-07-25 20:36:04.861324498 +0200 +@@ -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-07-25 20:36:04.861324498 +0200 +@@ -0,0 +1,1557 @@ ++/* ++ * Copyright (C) 2008 Nir Tzachar ++#include ++ ++#include "lkc.h" ++#include "nconf.h" ++#include ++ ++static const char nconf_global_help[] = N_( ++"Help windows\n" ++"------------\n" ++"o Global help: Unless in a data entry window, pressing 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 .\n" ++"\n" ++"o Local help: To get help related to the current menu entry, use any\n" ++" of , or if in a data entry window then press .\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 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 to build it in, to make it a module or\n" ++" to remove it. You may press the 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 \n" ++"Linewise down \n" ++"Pagewise up \n" ++"Pagewise down \n" ++"First entry \n" ++"Last entry \n" ++"Enter a submenu \n" ++"Go back to parent menu \n" ++"Close a help window \n" ++"Close entry window, apply \n" ++"Close entry window, forget \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 \n" ++" Jump to next hit \n" ++" Jump to previous hit \n" ++"Exit menu search mode \n" ++"Search for configuration variables with or without leading CONFIG_\n" ++" RegExpr\n" ++"Verbose search help \n" ++"----------------------------------------------------------------------\n" ++"\n" ++"Unless in a data entry window, key <1> may be used instead of ,\n" ++"<2> instead of , 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 .\n" ++"\n" ++"\n" ++"Data entry\n" ++"----------\n" ++"Enter the requested information and press . 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 to exit.\n" ++"\n" ++"\n" ++"Alternate configuration files\n" ++"-----------------------------\n" ++"nconfig supports switching between different configurations.\n" ++"Press to save your current configuration. Press 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" ++" 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 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 and .\n" ++"Enter a submenu with or .\n" ++"Exit a submenu to its parent menu with or .\n" ++"Pressing includes, excludes, modularizes features.\n" ++"Pressing cycles through the available options.\n" ++"To search for menu entries press .\n" ++" always leaves the current window.\n" ++"\n" ++"You do not have function keys support.\n" ++"Press <1> instead of , <2> instead of , etc.\n" ++"For verbose global help use key <1>.\n" ++"For help related to the current menu entry press or .\n"), ++menu_instructions[] = N_( ++"Legend: [*] built-in [ ] excluded 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 or .\n" ++"Enter a submenu with or .\n" ++"Exit a submenu to its parent menu with or .\n" ++"Pressing includes, excludes, modularizes features.\n" ++"Pressing cycles through the available options.\n" ++"To search for menu entries press .\n" ++" always leaves the current window.\n" ++"\n" ++"Pressing <1> may be used instead of , <2> instead of , etc.\n" ++"For verbose global help press .\n" ++"For help related to the current menu entry press or .\n"), ++radiolist_instructions[] = N_( ++"Press , , or to navigate a radiolist, select\n" ++"with .\n" ++"For help related to the current entry press or .\n" ++"For global help press .\n"), ++inputbox_instructions_int[] = N_( ++"Please enter a decimal value.\n" ++"Fractions will not be accepted.\n" ++"Press to apply, to cancel."), ++inputbox_instructions_hex[] = N_( ++"Please enter a hexadecimal value.\n" ++"Press to apply, to cancel."), ++inputbox_instructions_string[] = N_( ++"Please enter a string value.\n" ++"Press to apply, 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 ( [ = 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, ++ " ", ++ ""); ++ 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" ++ " to cancel and resume nconfig."), ++ 2, ++ " ", ++ ""); ++ 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, ++ ""); ++ break; ++ default: ++ btn_dialog( ++ main_window, ++ _("Your configuration changes were NOT saved."), ++ 1, ++ ""); ++ 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, ¤t_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, ""); ++} ++ ++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, ':', " %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, ""); ++ 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-07-25 20:36:04.865324519 +0200 +@@ -0,0 +1,656 @@ ++/* ++ * Copyright (C) 2008 Nir Tzachar 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, ++ "", ++ 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-07-25 20:36:04.865324519 +0200 +@@ -0,0 +1,96 @@ ++/* ++ * Copyright (C) 2008 Nir Tzachar ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#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-07-25 20:36:04.865324519 +0200 +@@ -3,24 +3,43 @@ + * Released under the terms of the GNU GPL v2.0. + */ + +-#include ++#include ++ ++#if QT_VERSION < 0x040000 ++#include + #include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#else ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#endif ++ ++#include ++#include + #include + #include +-#include + #include +-#include +-#include + #include + #include + #include + #include + #include +-#include +-#include +-#include +-#include + #include ++#include + + #include + +@@ -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 ConfigSettings::readSizes(const QString& key, bool *ok) ++Q3ValueList ConfigSettings::readSizes(const QString& key, bool *ok) + { +- QValueList result; ++ Q3ValueList 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& value) ++bool ConfigSettings::writeSizes(const QString& key, const Q3ValueList& value) + { + QStringList stringList; +- QValueList::ConstIterator it; ++ Q3ValueList::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 += ""; +- head += print_filter(_(menu->prompt->text)); ++ head += print_filter(_(_menu->prompt->text)); + head += ""; + 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 += ""; +- head += print_filter(_(menu->prompt->text)); ++ head += print_filter(_(_menu->prompt->text)); + head += "

"; + if (showDebug()) { +- if (menu->prompt->visible.expr) { ++ if (_menu->prompt->visible.expr) { + debug += "  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 += "

"; + } + } + } + if (showDebug()) +- debug += QString().sprintf("defined at %s:%d

", menu->file->name, menu->lineno); ++ debug += QString().sprintf("defined at %s:%d

", _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 sizes = configSettings->readSizes("/split", &ok); ++ Q3ValueList 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 sizes = configSettings->readSizes("/split1", &ok); ++ Q3ValueList 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 .\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-07-25 20:36:04.865324519 +0200 +@@ -3,26 +3,25 @@ + * Released under the terms of the GNU GPL v2.0. + */ + ++#if QT_VERSION < 0x040000 + #include +-#if QT_VERSION >= 300 +-#include + #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 +- bool writeEntry(const QString& key, t value) +- { return TRUE; } +-}; ++#include ++#endif ++#include ++ ++#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 readSizes(const QString& key, bool *ok); +- bool writeSizes(const QString& key, const QValueList& value); ++ Q3ValueList readSizes(const QString& key, bool *ok); ++ bool writeSizes(const QString& key, const Q3ValueList& 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 + 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-07-25 20:36:04.853324457 +0200 +@@ -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-07-25 20:36:04.865324519 +0200 +@@ -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-07-25 20:36:04.865324519 +0200 +@@ -7,8 +7,8 @@ + #include + #include + #include ++#include + +-#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 : "", ++ prop_get_type_name(prop->type), ++ next_sym->name ? next_sym->name : ""); ++ } else if (stack->prop) { ++ fprintf(stderr, "%s:%d:\tsymbol %s depends on %s\n", ++ prop->file->name, prop->lineno, ++ sym->name ? sym->name : "", ++ next_sym->name ? next_sym->name : ""); ++ } 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 : "", ++ next_sym->name ? next_sym->name : ""); ++ } 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 : "", ++ next_sym->name ? next_sym->name : ""); ++ } else { ++ fprintf(stderr, "%s:%d:\tsymbol %s is selected by %s\n", ++ prop->file->name, prop->lineno, ++ sym->name ? sym->name : "", ++ next_sym->name ? next_sym->name : ""); ++ } ++ } ++ ++ 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 : ""); ++ 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 : ""); +- 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-07-25 20:36:04.865324519 +0200 +@@ -5,6 +5,8 @@ + * Released under the terms of the GNU GPL v2.0. + */ + ++#include ++#include + #include + #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-07-25 20:36:04.865324519 +0200 +@@ -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-07-25 20:36:04.865324519 +0200 +@@ -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 ." + #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-07-25 20:36:04.865324519 +0200 +@@ -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 + #include + +-#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 @@ + + { + {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 : ""; + } +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-07-25 20:36:04.865324519 +0200 +@@ -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 ++#include ++#include ++#include ++ ++/* end standard C headers. */ ++ ++/* flex integer type definitions */ ++ ++#ifndef FLEXINT_H ++#define FLEXINT_H ++ ++/* C99 systems have . 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 ++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 ++ * Released under the terms of the GNU GPL v2.0. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#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 ++#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 : ""; ++} ++ +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-07-25 20:36:04.865324519 +0200 +@@ -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 . */ + + /* 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 + #include + +-#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 /* 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 ""; + } + +-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-07-25 20:36:04.865324519 +0200 +@@ -11,11 +11,8 @@ + #include + #include + +-#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 T_MAINMENU +@@ -70,6 +63,7 @@ + %token T_DEFAULT + %token T_SELECT + %token T_RANGE ++%token T_VISIBLE + %token T_OPTION + %token T_ON + %token 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 ""; + } + +-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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.449322340 +0200 +@@ -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-07-25 20:36:04.477322487 +0200 +@@ -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-07-25 20:36:04.481322508 +0200 +@@ -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-07-25 20:36:04.665323472 +0200 +@@ -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-07-25 20:36:04.921324813 +0200 +@@ -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-07-25 20:36:04.893324666 +0200 +@@ -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-07-25 20:36:04.933324875 +0200 +@@ -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 + + #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-07-25 20:36:04.945324938 +0200 +@@ -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 "; + echo "#include " | + $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 directly; include 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 directly; include 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-07-25 20:36:04.945324938 +0200 +@@ -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-07-25 20:36:04.945324938 +0200 +@@ -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-07-25 20:36:04.949324959 +0200 +@@ -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 , 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 . + + 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-07-25 20:36:04.949324959 +0200 +@@ -1,13 +1,5 @@ + /* +- * Copyright (c) 2002 - 2005 Tony Finch . 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 + * + * 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 +- +-#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 +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-/* 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-07-25 20:36:04.949324959 +0200 +@@ -0,0 +1,57 @@ ++/* ++ * Copyright (c) 2012 - 2013 Tony Finch ++ * ++ * 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 ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* 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-07-25 20:36:04.949324959 +0200 +@@ -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-07-25 20:36:04.409322131 +0200 +@@ -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-07-25 20:36:04.961325022 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.961325022 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.973325085 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.973325085 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * ISO C99 Standard: 7.2 Diagnostics +@@ -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-07-25 20:36:04.973325085 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.973325085 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.973325085 +0200 +@@ -0,0 +1,101 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Copyright (C) 2000-2011 Erik Andersen ++ * ++ * 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 ++ ++#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 ++ ++# 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-07-25 20:36:04.973325085 +0200 +@@ -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 ++ . */ + + /* + * ISO C99: 7.3 Complex arithmetic +@@ -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-07-25 20:36:04.977325106 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.977325106 +0200 +@@ -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 . + */ + + #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-07-25 20:36:04.977325106 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * ISO C99 Standard 7.4: Character handling +@@ -405,8 +404,8 @@ + + #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */ + +-/* We define {__,}isascii for internal use only */ + #if defined _LIBC && !defined __UCLIBC_SUSV4_LEGACY__ ++/* We define {__,}isascii for internal use only */ + # define __isascii(c) (((c) & ~0x7f) == 0) + # define isascii(c) __isascii (c) + #endif +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-07-25 20:36:04.977325106 +0200 +@@ -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 ++ . */ + + /* + * POSIX Standard: 5.1.2 Directory Operations +@@ -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-07-25 20:36:04.977325106 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:04.977325106 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.977325106 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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 ++# 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-07-25 20:36:04.977325106 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.977325106 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * ISO C99 Standard: 7.5 Errors +@@ -47,6 +46,11 @@ + extern int errno; + #endif + ++#ifdef _LIBC ++# ifdef __UCLIBC_HAS___PROGNAME__ ++extern const char *__progname, *__progname_full; ++# endif ++#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-07-25 20:36:04.977325106 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.977325106 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.977325106 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * POSIX Standard: 6.5 File Control Operations +@@ -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-07-25 20:36:04.977325106 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.977325106 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * ISO C99 7.6: Floating-point environment +@@ -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-07-25 20:36:04.977325106 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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 . */ + #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-07-25 20:36:04.977325106 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * 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-07-25 20:36:04.961325022 +0200 +@@ -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-07-25 20:36:04.977325106 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.977325106 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.977325106 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * POSIX Standard: 9.2.1 Group Database Access +@@ -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-07-25 20:36:04.977325106 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.977325106 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.977325106 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.997325210 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * ISO C99: 7.8 Format conversion of integer types +@@ -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-07-25 20:36:04.997325210 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.997325210 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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 + + /* 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 */ +@@ -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-07-25 20:36:04.997325210 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:04.997325210 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.997325210 +0200 +@@ -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 ++ . */ + + #ifndef _LIBINTL_H + #define _LIBINTL_H 1 + + #include + ++#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-07-25 20:36:04.997325210 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * ISO C99 Standard: 7.10/5.2.4.2.1 Sizes of integer types +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-07-25 20:36:04.997325210 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.997325210 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * ISO C99 Standard: 7.11 Localization +@@ -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 +-#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-07-25 20:36:04.997325210 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.997325210 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * ISO C99 Standard: 7.12 Mathematics +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-07-25 20:36:04.997325210 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * 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-07-25 20:36:04.997325210 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:04.997325210 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.009325274 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:05.009325274 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:05.009325274 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.009325274 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.009325274 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.009325274 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.009325274 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:05.025325357 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.025325357 +0200 +@@ -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 ++ . */ + + /* All data returned by the network data base library are supplied in + host order and returned in network order (suitable for use in +@@ -59,7 +58,6 @@ + + /* Function to get address of global `h_errno' variable. */ + extern int *__h_errno_location (void) __THROW __attribute__ ((__const__)); +-libc_hidden_proto(__h_errno_location) + + /* Macros for accessing h_errno from inside libc. */ + #ifdef _LIBC +@@ -88,8 +86,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 +93,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 +109,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 +128,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 +158,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 +166,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 +178,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 +197,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 +205,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 +254,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 +272,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 +325,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 +350,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 +399,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 +421,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 +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 setnetgrent (__const char *__netgroup); ++extern int setnetgrent (const char *__netgroup); + + /* Free all space allocated by previous `setnetgrent' call. + +@@ -463,8 +469,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 +485,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 +505,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 +519,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 +536,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 +548,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 +562,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 +574,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 +644,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 +661,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 +684,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 +695,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-07-25 20:36:05.041325441 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.057325525 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.057325525 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.057325525 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.057325525 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.057325525 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.057325525 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.057325525 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.057325525 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.057325525 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.057325525 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.057325525 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.057325525 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * 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-07-25 20:36:05.069325588 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.085325672 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.085325672 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.085325672 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + /* 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-07-25 20:36:05.085325672 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:05.121325860 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.121325860 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * POSIX Standard: 9.2.2 User Database Access +@@ -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-07-25 20:36:05.121325860 +0200 +@@ -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 ++ . */ + + #ifndef _REGEX_H + #define _REGEX_H 1 + +-#include +- + #include + + __BEGIN_DECLS + +-/* POSIX says that must be included (by the caller) before +- . */ +- +-#if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS +-/* VMS doesn't have `size_t' in , even though POSIX says it +- should be there. */ +-# include +-#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 \ matches . + If not set, then \ 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-07-25 20:36:05.121325860 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.137325944 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.137325944 +0200 +@@ -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 + #include + +@@ -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-07-25 20:36:05.137325944 +0200 +@@ -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-07-25 20:36:05.137325944 +0200 +@@ -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-07-25 20:36:05.137325944 +0200 +@@ -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-07-25 20:36:05.137325944 +0200 +@@ -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 +-#endif +- + #include /* some typedefs */ + #include + +@@ -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-07-25 20:36:05.137325944 +0200 +@@ -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-07-25 20:36:05.141325965 +0200 +@@ -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 +- + 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-07-25 20:36:05.141325965 +0200 +@@ -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 + #include + #include +@@ -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-07-25 20:36:05.141325965 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.153326028 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * 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-07-25 20:36:05.153326028 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.161326070 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + 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-07-25 20:36:05.161326070 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.161326070 +0200 +@@ -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 ++ . */ + + /* + * ISO C99 Standard: 7.13 Nonlocal jumps +@@ -30,8 +29,9 @@ + #include /* Get `__jmp_buf'. */ + #include /* 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-07-25 20:36:05.161326070 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.161326070 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:05.165326090 +0200 +@@ -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 ++ . */ + + /* + * ISO C99 Standard: 7.14 Signal handling +@@ -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 ++ ++/* Get the `siginfo_t' type plus the needed symbols. */ ++# include ++#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 +- +-/* Get the `siginfo_t' type plus the needed symbols. */ +-# include +-# 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 + + /* 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 ++/* 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 ). */ + # 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 + ++#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 + + # 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 ++# 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-07-25 20:36:05.165326090 +0200 +@@ -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 ++ . */ ++ ++#ifndef _SPAWN_H ++#define _SPAWN_H 1 ++ ++#include ++#include ++#define __need_sigset_t ++#include ++#include ++ ++/* For the tiny inlines (errno/free/memset). */ ++#include ++#include ++#include ++ ++ ++/* 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-07-25 20:36:05.165326090 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * ISO C99: 7.18 Integer types +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-07-25 20:36:05.165326090 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:05.165326090 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * ISO C99 Standard: 7.19 Input/output +@@ -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 . */ + + /* 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 + #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 /* 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-07-25 20:36:05.165326090 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * ISO C99 Standard: 7.20 General utilities +@@ -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 +-extern uint32_t arc4random(void); ++# include ++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-07-25 20:36:05.165326090 +0200 +@@ -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 ++ . */ + + /* + * ISO C99 Standard: 7.21 String handling +@@ -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 + + /* 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 ) 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-07-25 20:36:05.165326090 +0200 +@@ -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 ++ . */ + + #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 ++ ++/* 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 " 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-07-25 20:36:05.177326154 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.177326154 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.177326154 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.177326154 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.177326154 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.177326154 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.177326154 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:05.177326154 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.177326154 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.177326154 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.177326154 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:05.177326154 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.177326154 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* Written by H. Bergman . */ + +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-07-25 20:36:05.177326154 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.177326154 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:05.181326174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -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 + #include + ++#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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* POSIX 1003.1g: 6.2 Select from File Descriptor Sets */ + +@@ -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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * POSIX Standard: 5.6 File Characteristics +@@ -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-07-25 20:36:05.181326174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SYSINFO_H + #define _SYS_SYSINFO_H 1 +@@ -24,6 +23,8 @@ + #ifndef _LINUX_KERNEL_H + /* Include our own copy of struct sysinfo to avoid binary compatability + * problems with Linux 2.4, which changed things. Grumble, grumble. */ ++#define _LINUX_SYSINFO_H ++ + #define SI_LOAD_SHIFT 16 + struct sysinfo { + long uptime; /* Seconds since boot */ +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-07-25 20:36:05.181326174 +0200 +@@ -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-07-25 20:36:05.181326174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * POSIX Standard: 4.5.2 Process Times +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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * POSIX Standard: 2.6 Primitive System Data Types +@@ -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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * This interface is obsolete. Use 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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * POSIX Standard: 4.4 System Identification +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-07-25 20:36:05.181326174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * POSIX Standard: 3.2.1 Wait for Process Termination +@@ -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 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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * POSIX Standard: 7.1-2 General Terminal Interface +@@ -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 . */ + 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-07-25 20:36:05.181326174 +0200 +@@ -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 ++ . */ + + /* + * ISO C99 Standard: 7.22 Type-generic math +@@ -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 " + #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-07-25 20:36:05.181326174 +0200 +@@ -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 ++ . */ + + /* + * ISO C99 Standard: 7.23 Date and time +@@ -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 + + 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-07-25 20:36:05.181326174 +0200 +@@ -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-07-25 20:36:05.181326174 +0200 +@@ -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 ++ . */ ++ ++/* The System V ABI user-level context switching support functions ++ are marked obsolescent by SuSv3. */ + + #ifndef _UCONTEXT_H + #define _UCONTEXT_H 1 + + #include + ++#ifdef __UCLIBC_HAS_CONTEXT_FUNCS__ ++ + /* Get machine dependent definition of data structures. */ + #include + +-/* 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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -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 ++ . */ + + /* + * POSIX Standard: 2.10 Symbolic Constants +@@ -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 ++/* keep it after posix_opt.h, it overwrites based on uClibc's config options */ ++#include + + /* 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 + + /* 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 + #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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * POSIX Standard: 5.6.6 Set File Access and Modification Times +@@ -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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.181326174 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.185326195 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* This interface is obsolete. New programs should use + and/or instead of . */ +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-07-25 20:36:05.185326195 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * ISO C99 Standard: 7.24 +@@ -133,46 +132,46 @@ + /* This incomplete type is defined in 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 + +-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-07-25 20:36:05.185326195 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * 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-07-25 20:36:05.185326195 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.185326195 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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 ++#endif + + /* POSIX 2008 makes locale_t official. */ + typedef __locale_t locale_t; +-#else +-# include +-#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-07-25 20:36:05.209326321 +0200 +@@ -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 ++#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-07-25 20:36:05.209326321 +0200 +@@ -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 ++#include + #include /* before elf.h to get ELF_USES_RELOCA right */ + #include + #include ++#include ++#include + +-/* 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 + #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-07-25 20:36:05.213326342 +0200 +@@ -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-07-25 20:36:05.209326321 +0200 +@@ -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-07-25 20:36:05.209326321 +0200 +@@ -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 /* for do_rem */ + #include + ++#define __need_NULL ++#include ++ ++#include /* 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 ++# 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-07-25 20:36:05.209326321 +0200 +@@ -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 ++ ++#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 ++#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-07-25 20:36:05.213326342 +0200 +@@ -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-07-25 20:36:05.213326342 +0200 +@@ -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 + +@@ -30,6 +30,10 @@ + #include /* for ptrdiff_t */ + #include + #define _FCNTL_H ++/* We need this if arch has only new syscalls defined */ ++#ifndef AT_FDCWD ++#define AT_FDCWD -100 ++#endif /* AT_FDCWD */ + #include + #include + /* Pull in the arch specific type information */ +@@ -42,7 +46,6 @@ + #ifndef __ARCH_HAS_NO_SHARED__ + #include + #include +-#include + /* Now the ldso specific headers */ + #include + #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 ++# define _dl_strdup strdup ++# include ++# 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 + #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-07-25 20:36:05.245326510 +0200 +@@ -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-07-25 20:36:05.245326510 +0200 +@@ -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-07-25 20:36:05.245326510 +0200 +@@ -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-07-25 20:36:05.245326510 +0200 +@@ -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-07-25 20:36:05.245326510 +0200 +@@ -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-07-25 20:36:05.245326510 +0200 +@@ -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 ++#include ++ ++; 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-07-25 20:36:05.257326572 +0200 +@@ -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 ++ . */ + + #include + +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-07-25 20:36:05.257326572 +0200 +@@ -7,13 +7,14 @@ + */ + + #include +-#include ++#include + + #if !defined(__thumb__) + __asm__( + " .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-07-25 20:36:05.257326572 +0200 +@@ -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-07-25 20:36:05.257326572 +0200 +@@ -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-07-25 20:36:05.257326572 +0200 +@@ -92,6 +92,7 @@ + + #include + #include ++#include + + #include + +@@ -101,7 +102,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-07-25 20:36:05.257326572 +0200 +@@ -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 ++ . */ + + #include + +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-07-25 20:36:05.273326656 +0200 +@@ -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-07-25 20:36:05.273326656 +0200 +@@ -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-07-25 20:36:05.285326719 +0200 +@@ -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 ++. */ + + /* 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-07-25 20:36:05.285326719 +0200 +@@ -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 ++. */ + + #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-07-25 20:36:05.289326740 +0200 +@@ -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 ++. */ + + #include /* __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-07-25 20:36:05.289326740 +0200 +@@ -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 ++. */ + + /* 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-07-25 20:36:05.301326802 +0200 +@@ -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-07-25 20:36:05.301326802 +0200 +@@ -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-07-25 20:36:05.301326802 +0200 +@@ -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-07-25 20:36:05.321326908 +0200 +@@ -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-07-25 20:36:05.321326908 +0200 +@@ -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-07-25 20:36:05.321326908 +0200 +@@ -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-07-25 20:36:05.325326929 +0200 +@@ -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-07-25 20:36:05.373327180 +0200 +@@ -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-07-25 20:36:05.377327201 +0200 +@@ -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 +@@ -527,8 +526,8 @@ + + #ifdef __LDSO_STANDALONE_SUPPORT__ + if (_start == (void *) auxvt[AT_ENTRY].a_un.a_val) { +- unsigned int *aux_dat = (unsigned int *) argv; +- int argc = aux_dat[-1]; ++ ElfW(Addr) *aux_dat = (ElfW(Addr) *) argv; ++ int argc = (int) aux_dat[-1]; + + tpnt->libname = argv[0]; + while (argc > 1) +@@ -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-07-25 20:36:05.389327264 +0200 +@@ -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-07-25 20:36:05.389327264 +0200 +@@ -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-07-25 20:36:05.225326404 +0200 +@@ -9,8 +9,10 @@ + + CFLAGS-ldso := -DNOT_IN_libc -DIS_IN_rtld $(SSP_DISABLE_FLAGS) + ++ifneq ($(TARGET_ARCH),arc) + # This stuff will not work with -fomit-frame-pointer + CFLAGS-ldso += -fno-omit-frame-pointer ++endif + + CFLAGS-ldso += -I$(top_srcdir)ldso/ldso/$(TARGET_ARCH) -I$(top_srcdir)ldso/include -I$(top_srcdir)ldso/ldso + CFLAGS-ldso += -DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" -DUCLIBC_LDSO=\"$(UCLIBC_LDSO)\" +@@ -36,7 +38,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-07-25 20:36:05.397327305 +0200 +@@ -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-07-25 20:36:05.421327432 +0200 +@@ -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-07-25 20:36:05.421327432 +0200 +@@ -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-07-25 20:36:05.421327432 +0200 +@@ -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-07-25 20:36:05.421327432 +0200 +@@ -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 ++ ++/* 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-07-25 20:36:05.421327432 +0200 +@@ -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-07-25 20:36:05.421327432 +0200 +@@ -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 ++ ++#ifdef __UCLIBC_HAS_THREADS_NATIVE__ ++ ++#include ++ ++ .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-07-25 20:36:05.421327432 +0200 +@@ -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-07-25 20:36:05.429327473 +0200 +@@ -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 ++ . */ + + __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-07-25 20:36:05.429327473 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:05.429327473 +0200 +@@ -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 ++ . */ + + .text + .align 4 +diff -Nur uClibc-0.9.33.2/ldso/ldso/mips/dl-debug.h uClibc-git/ldso/ldso/mips/dl-debug.h +--- uClibc-0.9.33.2/ldso/ldso/mips/dl-debug.h 2012-05-15 09:20:09.000000000 +0200 ++++ uClibc-git/ldso/ldso/mips/dl-debug.h 2014-07-25 20:36:05.441327536 +0200 +@@ -40,6 +40,15 @@ + [25] "R_MIPS_INSERT_A", "R_MIPS_INSERT_B", "R_MIPS_DELETE", + [28] "R_MIPS_HIGHER", "R_MIPS_HIGHEST", "R_MIPS_CALL_HI16", + [31] "R_MIPS_CALL_LO16", "R_MIPS_SCN_DISP", "R_MIPS_REL16", +- [34] "R_MIPS_ADD_IMMEDIATE", "R_MIPS_PJUMP", "R_MIPS_RELGOT", +- [37] "R_MIPS_JALR", ++ [34] "R_MIPS_ADD_IMMEDIATE", "R_MIPS_PJUMP", "R_MIPS_RELGOT", ++ [37] "R_MIPS_JALR", "R_MIPS_TLS_DTPMOD32", "R_MIPS_TLS_DTPREL32", ++ [40] "R_MIPS_TLS_DTPMOD64", "R_MIPS_TLS_DTPREL64", "R_MIPS_TLS_GD", ++ [43] "R_MIPS_TLS_LDM", "R_MIPS_TLS_DTPREL_HI16", ++ [45] "R_MIPS_TLS_DTPREL_LO16", ++ [46] "R_MIPS_TLS_GOTTPREL", "R_MIPS_TLS_TPREL32", "R_MIPS_TLS_TPREL64", ++ [49] "R_MIPS_TLS_TPREL_HI16", ++ [50] "R_MIPS_TLS_TPREL_LO16", ++ [51] "R_MIPS_GLOB_DAT", ++ [126] "R_MIPS_COPY", "R_MIPS_JUMP_SLOT", ++ + }; +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-07-25 20:36:05.441327536 +0200 +@@ -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-07-25 20:36:05.441327536 +0200 +@@ -240,31 +240,19 @@ + case R_MIPS_TLS_DTPMOD32: + if (tls_tpnt) + *(ElfW(Word) *)reloc_addr = tls_tpnt->l_tls_modid; +-#ifdef __SUPPORT_LD_DEBUG__ +- _dl_dprintf(2, "TLS_DTPMOD : %s, %d, %d\n", +- symname, old_val, *((unsigned int *)reloc_addr)); +-#endif + break; + + case R_MIPS_TLS_DTPREL64: + case R_MIPS_TLS_DTPREL32: + *(ElfW(Word) *)reloc_addr += + TLS_DTPREL_VALUE (symbol_addr); +-#ifdef __SUPPORT_LD_DEBUG__ +- _dl_dprintf(2, "TLS_DTPREL : %s, %x, %x\n", +- symname, old_val, *((unsigned int *)reloc_addr)); +-#endif + break; + + 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)); +-#endif + break; + } + +@@ -325,11 +313,11 @@ + _dl_exit(1); + } + } +- } + #if defined (__SUPPORT_LD_DEBUG__) +- if (_dl_debug_reloc && _dl_debug_detail && reloc_addr) +- _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n", old_val, *reloc_addr, reloc_addr); ++ if (_dl_debug_reloc && _dl_debug_detail && reloc_addr) ++ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n", old_val, *reloc_addr, reloc_addr); + #endif ++ } + + return 0; + } +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-07-25 20:36:05.441327536 +0200 +@@ -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-07-25 20:36:05.453327599 +0200 +@@ -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-07-25 20:36:05.457327620 +0200 +@@ -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-07-25 20:36:05.469327682 +0200 +@@ -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-07-25 20:36:05.469327682 +0200 +@@ -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-07-25 20:36:05.481327745 +0200 +@@ -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-07-25 20:36:05.501327851 +0200 +@@ -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-07-25 20:36:05.501327851 +0200 +@@ -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-07-25 20:36:05.513327913 +0200 +@@ -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-07-25 20:36:05.513327913 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:05.533328017 +0200 +@@ -11,8 +11,10 @@ + __asm__ ( + " .text\n" + " .align 4\n" ++ " .literal_position\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-07-25 20:36:05.533328017 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + /* 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-07-25 20:36:05.533328017 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #define MIN_FRAME_SIZE 32 + +@@ -28,6 +27,7 @@ + + .text + .align 4 ++ .literal_position + .global _dl_linux_resolve + .type _dl_linux_resolve, @function + _dl_linux_resolve: +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-07-25 20:36:05.545328081 +0200 +@@ -32,7 +32,7 @@ + + #include + #include +-#include /* Needed for 'strstr' prototype' */ ++#include + #include + #include + +@@ -42,6 +42,7 @@ + + #if defined(USE_TLS) && USE_TLS + #include ++#include + extern void _dl_add_to_slotinfo(struct link_map *l); + #endif + +@@ -51,7 +52,6 @@ + + #ifdef SHARED + # if defined(USE_TLS) && USE_TLS +-# include + 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-07-25 20:36:05.545328081 +0200 +@@ -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-07-25 20:36:05.557328144 +0200 +@@ -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 ++.\" . + .\" + .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-07-25 20:36:05.569328207 +0200 +@@ -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-07-25 20:36:05.573328227 +0200 +@@ -17,8 +17,6 @@ + * Changed to use _int10tostr. + */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #include +@@ -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-07-25 20:36:05.577328249 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, 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 . + */ + + /* +@@ -23,8 +22,6 @@ + * - initial uClibc port + */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #include +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-07-25 20:36:05.577328249 +0200 +@@ -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 ++ . */ + +-#define __FORCE_GLIBC +-#include + #include + #include ++#include + +-#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-07-25 20:36:05.577328249 +0200 +@@ -51,8 +51,6 @@ + + If these license terms cause you a real problem, contact the author. */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #include +@@ -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-07-25 20:36:05.577328249 +0200 +@@ -17,8 +17,6 @@ + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #include +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-07-25 20:36:05.577328249 +0200 +@@ -5,8 +5,6 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #include +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-07-25 20:36:05.577328249 +0200 +@@ -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 ++ . */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #include +@@ -33,7 +30,6 @@ + #include + #include + #include +-#include + #include + #include + +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-07-25 20:36:05.577328249 +0200 +@@ -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 . + + Reworked Dec 2002 by Erik Andersen + */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #include +@@ -31,7 +28,6 @@ + #include + #include + #include +-#include + #include + + #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-07-25 20:36:05.577328249 +0200 +@@ -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 ++ . */ + +-#define __FORCE_GLIBC +-#include + #include + + #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-07-25 20:36:05.577328249 +0200 +@@ -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-07-25 20:36:05.577328249 +0200 +@@ -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-07-25 20:36:05.577328249 +0200 +@@ -32,8 +32,6 @@ + * SUCH DAMAGE. + */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #include +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-07-25 20:36:05.573328227 +0200 +@@ -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-07-25 20:36:05.577328249 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.577328249 +0200 +@@ -6,9 +6,6 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +-#include +-#include + #include + + #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-07-25 20:36:05.577328249 +0200 +@@ -15,8 +15,6 @@ + * SOFTWARE. + */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #include +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-07-25 20:36:05.577328249 +0200 +@@ -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 ++ . */ + +-#include +-#include +-#include +-#include +-#include + #include +-#include +-#include ++#include + + /* 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-07-25 20:36:05.577328249 +0200 +@@ -293,8 +293,6 @@ + - a sequence of labels ending with a pointer + */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #include +@@ -317,6 +315,7 @@ + #include + #include + #include ++#include + #include + #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) +@@ -1472,9 +1471,11 @@ + } + /* no more search domains to try */ + } +- /* dont loop, this is "no such host" situation */ +- h_errno = HOST_NOT_FOUND; +- goto fail1; ++ if (h.rcode != SERVFAIL) { ++ /* dont loop, this is "no such host" situation */ ++ h_errno = HOST_NOT_FOUND; ++ goto fail1; ++ } + } + /* Insert other non-fatal errors here, which do not warrant + * switching to next nameserver */ +@@ -1594,7 +1595,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 +1709,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 +1725,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 +1776,7 @@ + unsigned flags) + { + int serrno = errno; +- unsigned ok; ++ bool ok = 0; + struct hostent *hoste = NULL; + char domain[256]; + +@@ -1785,16 +1786,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 +1802,6 @@ + else + return EAI_FAMILY; + +- ok = 0; + if (host != NULL && hostlen > 0) + switch (sa->sa_family) { + case AF_INET: +@@ -1826,21 +1825,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 +3428,7 @@ + */ + } + ++/* has to be called under __resolv_lock */ + static int + __res_vinit(res_state rp, int preinit) + { +@@ -3440,7 +3437,6 @@ + int m = 0; + #endif + +- __UCLIBC_MUTEX_LOCK(__resolv_lock); + __close_nameservers(); + __open_nameservers(); + +@@ -3532,29 +3528,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 +3623,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 +3649,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 +3681,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 +3738,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 +4224,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-07-25 20:36:05.581328269 +0200 +@@ -35,8 +35,6 @@ + * credentials and verifiers to remote systems. + */ + +-#define __FORCE_GLIBC +-#include + #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-07-25 20:36:05.581328269 +0200 +@@ -38,13 +38,11 @@ + * for the credentials. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include + #include ++#include + #include + + #include +@@ -52,10 +50,6 @@ + #include + #include + +-#ifdef USE_IN_LIBIO +-# include +-#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-07-25 20:36:05.581328269 +0200 +@@ -30,9 +30,6 @@ + * Copyright (c) 1987 by Sun Microsystems, Inc. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include +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-07-25 20:36:05.581328269 +0200 +@@ -30,9 +30,6 @@ + * Copyright (C) 1987, Sun Microsystems, Inc. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include +@@ -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-07-25 20:36:05.581328269 +0200 +@@ -38,19 +38,10 @@ + * + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include "rpc_private.h" + +-#ifdef USE_IN_LIBIO +-# include +-# include +-# 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-07-25 20:36:05.585328291 +0200 +@@ -42,7 +42,6 @@ + * any interference from the kernel. + */ + +-#define __FORCE_GLIBC + #include + #include "rpc_private.h" + #include +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-07-25 20:36:05.585328291 +0200 +@@ -38,9 +38,6 @@ + * Copyright (C) 1984, Sun Microsystems, Inc. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include +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-07-25 20:36:05.585328291 +0200 +@@ -50,22 +50,14 @@ + * Now go hang yourself. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include + #include +-#include ++#include "rpc_private.h" + #include + #include + #include +-#ifdef USE_IN_LIBIO +-# include +-#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-07-25 20:36:05.585328291 +0200 +@@ -37,12 +37,9 @@ + * Copyright (C) 1984, Sun Microsystems, Inc. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include +-#include ++#include "rpc_private.h" + #include + #include + #include +@@ -52,20 +49,12 @@ + #include + #include + #include +-#ifdef USE_IN_LIBIO +-# include +-#endif + + #ifdef IP_RECVERR + #include "errqueue.h" + #include + #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-07-25 20:36:05.585328291 +0200 +@@ -46,24 +46,15 @@ + * Now go hang yourself. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include + #include +-#include ++#include "rpc_private.h" + #include + #include + #include + #include +-#ifdef USE_IN_LIBIO +-# include +-#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-07-25 20:36:05.585328291 +0200 +@@ -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 ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include + #include +-#include ++#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-07-25 20:36:05.585328291 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:05.585328291 +0200 +@@ -44,6 +44,7 @@ + #include + #include + #include ++#include + #include + #include + /* 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-07-25 20:36:05.585328291 +0200 +@@ -33,8 +33,6 @@ + * Copyright (c) 1985 by Sun Microsystems, Inc. + */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #include +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-07-25 20:36:05.585328291 +0200 +@@ -35,9 +35,6 @@ + * Copyright (c) 1985 by Sun Microsystems, Inc. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include +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-07-25 20:36:05.581328269 +0200 +@@ -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-07-25 20:36:05.585328291 +0200 +@@ -34,9 +34,6 @@ + * Client interface to pmap rpc service. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include +@@ -44,7 +41,7 @@ + #include + #include + #include +-#include ++#include "rpc_private.h" + #include + #include + +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-07-25 20:36:05.585328291 +0200 +@@ -39,12 +39,9 @@ + * Copyright (C) 1984, Sun Microsystems, Inc. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include +-#include ++#include "rpc_private.h" + #include + #include + #include +@@ -52,17 +49,12 @@ + #include + #include + #include +-#undef _POSIX_SOURCE /* Ultrix needs --roland@gnu */ + #include /* Ultrix needs before net/if --roland@gnu */ + #include + #include + #include + #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-07-25 20:36:05.585328291 +0200 +@@ -39,7 +39,7 @@ + * Copyright (C) 1984, Sun Microsystems, Inc. + */ + +-#include ++#include "rpc_private.h" + #include + #include + #include +@@ -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-07-25 20:36:05.585328291 +0200 +@@ -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-07-25 20:36:05.585328291 +0200 +@@ -76,7 +76,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -87,6 +86,11 @@ + #include + #include + ++/* 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-07-25 20:36:05.585328291 +0200 +@@ -27,8 +27,6 @@ + * SUCH DAMAGE. + */ + +-#define __FORCE_GLIBC +-#include + #include + #include + +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-07-25 20:36:05.585328291 +0200 +@@ -38,9 +38,6 @@ + * + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include +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-07-25 20:36:05.585328291 +0200 +@@ -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 +- + #include + #include + +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-07-25 20:36:05.585328291 +0200 +@@ -1,5 +1,7 @@ +-#ifndef _RPC_RPC_H ++#ifndef _RPC_PRIVATE_H ++#define _RPC_PRIVATE_H + #include ++#include + + /* Now define the internal interfaces. */ + extern u_long _create_xid (void) attribute_hidden; +@@ -12,14 +14,13 @@ + */ + #ifdef __UCLIBC_HAS_THREADS__ + #include ++#include + 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-07-25 20:36:05.585328291 +0200 +@@ -44,9 +44,6 @@ + * routines are also in this program. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + + #include +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-07-25 20:36:05.585328291 +0200 +@@ -4,8 +4,6 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #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-07-25 20:36:05.585328291 +0200 +@@ -43,9 +43,6 @@ + * what unix uses. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include +@@ -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-07-25 20:36:05.585328291 +0200 +@@ -27,8 +27,6 @@ + * SUCH DAMAGE. + */ + +-#define __FORCE_GLIBC +-#include + #include + #include + +@@ -37,13 +35,14 @@ + #include + #include + #include +-#include ++#ifdef __UCLIBC_HAS_THREADS__ ++# include ++#endif + #include + #include + #include ++#include + +- +-#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-07-25 20:36:05.585328291 +0200 +@@ -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 ++ . */ + +-#define __FORCE_GLIBC +-#include + #include + #include +-#include + #include + #if 0 ++#include + #include + #include + #include +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-07-25 20:36:05.585328291 +0200 +@@ -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-07-25 20:36:05.585328291 +0200 +@@ -38,9 +38,6 @@ + * Copyright (C) 1984, Sun Microsystems, Inc. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include +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-07-25 20:36:05.585328291 +0200 +@@ -36,9 +36,6 @@ + * Copyright (C) 1984, Sun Microsystems, Inc. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include +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-07-25 20:36:05.585328291 +0200 +@@ -40,8 +40,6 @@ + * Copyright (C) 1984, Sun Microsystems, Inc. + */ + +-#define __FORCE_GLIBC +-#include + #include "rpc_private.h" + #include + +@@ -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-07-25 20:36:05.585328291 +0200 +@@ -31,13 +31,10 @@ + * Wait for input, call server program. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include +-#include ++#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-07-25 20:36:05.585328291 +0200 +@@ -38,9 +38,6 @@ + * Copyright (C) 1984, Sun Microsystems, Inc. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include +@@ -49,13 +46,6 @@ + #include + #include + +-#ifdef USE_IN_LIBIO +-# include +-# include +-# 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-07-25 20:36:05.585328291 +0200 +@@ -41,25 +41,15 @@ + * and a record/tcp stream. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include +-#include ++#include "rpc_private.h" + #include + #include + #include + #include + +-#ifdef USE_IN_LIBIO +-# include +-# include +-# 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-07-25 20:36:05.589328311 +0200 +@@ -39,13 +39,10 @@ + * Copyright (C) 1984, Sun Microsystems, Inc. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include +-#include ++#include "rpc_private.h" + #include + #include + +@@ -53,13 +50,6 @@ + #include + #endif + +-#ifdef USE_IN_LIBIO +-# include +-# include +-# 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-07-25 20:36:05.589328311 +0200 +@@ -37,13 +37,10 @@ + * and a record/unix stream. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include +-#include ++#include "rpc_private.h" + #include + #include + #include +@@ -51,11 +48,6 @@ + #include + #include + +-#ifdef USE_IN_LIBIO +-# include +-#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-07-25 20:36:05.589328311 +0200 +@@ -40,23 +40,15 @@ + * arrays. See xdr.h for more info on the interface to xdr. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include + #include + #include +- +-#ifdef USE_IN_LIBIO +-# include +-#endif +- ++#include + + #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-07-25 20:36:05.589328311 +0200 +@@ -41,21 +41,14 @@ + * xdr. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include ++#include + + #include + #include + +-#ifdef USE_IN_LIBIO +-# include +-#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-07-25 20:36:05.589328311 +0200 +@@ -41,9 +41,6 @@ + * xdr. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + +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-07-25 20:36:05.589328311 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:05.589328311 +0200 +@@ -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-07-25 20:36:05.589328311 +0200 +@@ -44,21 +44,10 @@ + * The other 31 bits encode the byte length of the fragment. + */ + +-#define __FORCE_GLIBC +-#include +- +- + #include + #include + #include +-#include +- +-#ifdef USE_IN_LIBIO +-# include +-# include +-# 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-07-25 20:36:05.589328311 +0200 +@@ -40,20 +40,11 @@ + * "pointers". See xdr.h for more info on the interface to xdr. + */ + +-#define __FORCE_GLIBC +-#include +- + #include + #include + #include + #include +- +-#ifdef USE_IN_LIBIO +-# include +-# include +-# define fputs(s, f) _IO_fputs (s, f) +-#endif +- ++#include + + #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-07-25 20:36:05.589328311 +0200 +@@ -41,15 +41,6 @@ + #include + #include + +-#ifdef USE_IN_LIBIO +-# include +-# 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-07-25 20:36:05.589328311 +0200 +@@ -4,15 +4,12 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#define __FORCE_GLIBC +-#include +-#include +-#include ++#include ++#include + #include ++#include + + #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 +-#include +-#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-07-25 20:36:05.609328415 +0200 +@@ -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 ++ * . + */ + + /* 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-07-25 20:36:05.609328415 +0200 +@@ -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-07-25 20:36:05.629328521 +0200 +@@ -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 ++ * . + */ + + /* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION! +@@ -36,10 +36,6 @@ + #include + #include + +-#ifdef __UCLIBC_HAS_XLOCALE__ +-# include +-#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-07-25 20:36:05.625328499 +0200 +@@ -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-07-25 20:36:05.641328583 +0200 +@@ -5,12 +5,14 @@ + */ + + #include <_lfs_64.h> +- + #include +-#include +-#include "dirstream.h" ++ ++#if __WORDSIZE != 64 ++# include ++# 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-07-25 20:36:05.641328583 +0200 +@@ -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-07-25 20:36:05.641328583 +0200 +@@ -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 . */ + + /* + * POSIX Standard: 5.1.2 Directory Operations +@@ -29,18 +28,6 @@ + + #include + +-/* 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-07-25 20:36:05.641328583 +0200 +@@ -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-07-25 20:36:05.641328583 +0200 +@@ -5,52 +5,12 @@ + */ + + #include <_lfs_64.h> +- +-#include +-#include +-#include +-#include + #include +-#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-07-25 20:36:05.641328583 +0200 +@@ -5,62 +5,12 @@ + */ + + #include <_lfs_64.h> +- +-#include +-#include +-#include +-#include + #include +-#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-07-25 20:36:05.641328583 +0200 +@@ -4,20 +4,22 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +- +-#include +-#include +-#include +-#include + #include ++#include ++#define __need_NULL ++#include + #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-07-25 20:36:05.641328583 +0200 +@@ -4,19 +4,24 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + ++#include + #include +-#include + #include +-#include +-#include ++#define __need_NULL ++#include + #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-07-25 20:36:05.641328583 +0200 +@@ -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 ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ + + #include <_lfs_64.h> +- + #include +-#include +-#include +-#include +-#include +-#include +-#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 = ¤t->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-07-25 20:36:05.641328583 +0200 +@@ -1,24 +1,29 @@ ++/* vi: set sw=4 ts=4: */ + /* +- * Copyright (C) 2000-2006 Erik Andersen ++ * Copyright (C) 2000-2011 Erik Andersen + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + + #include +-#include + #include + #include + #include +-#include + #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 = ¤t->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-07-25 20:36:05.641328583 +0200 +@@ -5,12 +5,14 @@ + */ + + #include <_lfs_64.h> +- + #include +-#include +-#include "dirstream.h" ++ ++#if __WORDSIZE != 64 ++# include ++# 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-07-25 20:36:05.641328583 +0200 +@@ -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-07-25 20:36:05.657328667 +0200 +@@ -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-07-25 20:36:05.657328667 +0200 +@@ -19,6 +19,7 @@ + #include + #include + #endif ++#include + + #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-07-25 20:36:05.665328709 +0200 +@@ -11,9 +11,6 @@ + #include + #include + #include +-#ifdef __UCLIBC_HAS_THREADS__ +-#include +-#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-07-25 20:36:05.665328709 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* Written by David MacKenzie . */ + /* Adjusted slightly by Erik Andersen */ +@@ -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-07-25 20:36:05.665328709 +0200 +@@ -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-07-25 20:36:05.677328772 +0200 +@@ -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 ++ . */ ++ ++#include ++#include ++#include ++#include ++#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-07-25 20:36:05.677328772 +0200 +@@ -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 . */ + + #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-07-25 20:36:05.677328772 +0200 +@@ -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 . */ + + #include +- + #include +-#include + #include ++#include + #include + #include + +- +- + /* 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-07-25 20:36:05.677328772 +0200 +@@ -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-07-25 20:36:05.689328835 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifdef HAVE_CONFIG_H + # include +@@ -54,10 +53,6 @@ + # include + #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-07-25 20:36:05.689328835 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:05.689328835 +0200 +@@ -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 . */ + + #ifdef HAVE_CONFIG_H + # include +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-07-25 20:36:05.689328835 +0200 +@@ -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-07-25 20:36:05.705328919 +0200 +@@ -38,6 +38,7 @@ + #include + + #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-07-25 20:36:05.705328919 +0200 +@@ -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-07-25 20:36:05.713328961 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.713328961 +0200 +@@ -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 ++ . */ + + #ifdef HAVE_CONFIG_H + # include + #endif + + #include ++/* need errno.h before undefining _LIBC */ ++#include + #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 + #include + #include + #include +@@ -77,11 +78,7 @@ + #if HAVE_SYS_PARAM_H || defined _LIBC + # include + #endif +-#ifdef _LIBC +-# include +-#else +-# include +-#endif ++#include + + #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-07-25 20:36:05.713328961 +0200 +@@ -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-07-25 20:36:05.729329044 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.729329044 +0200 +@@ -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-07-25 20:36:05.745329128 +0200 +@@ -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-07-25 20:36:05.745329128 +0200 +@@ -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 ++#include ++#include ++ ++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-07-25 20:36:05.745329128 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + + #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 + # 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-07-25 20:36:05.769329254 +0200 +@@ -1,21 +1,14 @@ + #include ++#include ++#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-07-25 20:36:05.769329254 +0200 +@@ -4,17 +4,15 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include "internal_errno.h" ++#include ++#include + +-/* 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 weak_const_function *__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-07-25 20:36:05.769329254 +0200 +@@ -0,0 +1,14 @@ ++#include ++#include ++#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-07-25 20:36:05.769329254 +0200 +@@ -4,10 +4,15 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include "internal_errno.h" ++#include ++#include + +-int * weak_const_function __h_errno_location (void) ++#ifndef __UCLIBC_HAS_TLS__ ++# undef h_errno ++extern int h_errno; ++#endif ++ ++int weak_const_function *__h_errno_location(void) + { + return &h_errno; + } +-libc_hidden_weak(__h_errno_location) +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 +-#include +-#include +- +-#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-07-25 20:36:05.769329254 +0200 +@@ -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-07-25 20:36:05.769329254 +0200 +@@ -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-07-25 20:36:05.769329254 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:05.769329254 +0200 +@@ -15,9 +15,6 @@ + */ + + #include +-#ifndef __UCLIBC_HAS_THREADS_NATIVE__ +-#define _ERRNO_H +-#endif + #include + #include + #include +@@ -25,20 +22,23 @@ + #include + #include + #include +-#include +-#include ++#include ++#include ++#include ++#ifndef __ARCH_HAS_NO_LDSO__ + #include +-#include +-#include ++#endif + #ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include + #include + #include + #include + #endif + #ifdef __UCLIBC_HAS_THREADS__ + #include +-#endif ++#endif ++#ifdef __UCLIBC_HAS_LOCALE__ ++#include ++#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-07-25 20:36:05.785329337 +0200 +@@ -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 ++ * . + */ + + /* 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 + + #undef CODESET_LIST + #define CODESET_LIST (__locale_mmap->codeset_list) + + #ifdef __UCLIBC_HAS_XLOCALE__ +-#include + #include + #else /* __UCLIBC_HAS_XLOCALE__ */ + /* We need this internally... */ + #define __UCLIBC_HAS_XLOCALE__ 1 +-#include + #include + #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-07-25 20:36:05.785329337 +0200 +@@ -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-07-25 20:36:05.813329484 +0200 +@@ -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-07-25 20:36:05.833329589 +0200 +@@ -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-07-25 20:36:05.845329652 +0200 +@@ -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-07-25 20:36:05.845329652 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + 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-07-25 20:36:05.845329652 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -30,7 +29,12 @@ + # include + # 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 ++# define HAVE_WCTYPE_H 1 + # include + # define __iswctype iswctype + # define __wcrtomb wcrtomb +@@ -38,6 +42,9 @@ + # define __wctype wctype + # endif + # include ++# 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-07-25 20:36:05.849329673 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + 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-07-25 20:36:05.845329652 +0200 +@@ -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 ++ . */ + + 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-07-25 20:36:05.845329652 +0200 +@@ -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 ++ . */ + + #ifndef _REGEX_INTERNAL_H + #define _REGEX_INTERNAL_H 1 + + #include + #include +-#include + #include + #include + +@@ -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-07-25 20:36:05.849329673 +0200 +@@ -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 ++ . */ + + /* To exclude some unwanted junk.... */ + #undef emacs + #include + /* unistd.h must be included with _LIBC defined: we need smallint */ + #include ++#include + #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 + #include + #include +-#include + + /* AIX requires this to be the first thing in the file. */ + #if defined _AIX && !defined REGEX_MALLOC +@@ -64,10 +64,9 @@ + # include + # 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 + # include + # 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 ++# define translate __REPB_PREFIX(translate) + + /* isalpha etc. are used for the character classes. */ + # include +@@ -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-07-25 20:36:05.869329778 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:05.865329757 +0200 +@@ -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 ++ . */ + + #include +-#include ++#include + #include + + #include +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-07-25 20:36:05.869329778 +0200 +@@ -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 . */ + + #include + #include +@@ -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-07-25 20:36:05.865329757 +0200 +@@ -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-07-25 20:36:05.869329778 +0200 +@@ -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 . */ + + /* + * 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-07-25 20:36:05.881329841 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include <_lfs_64.h> + +@@ -23,8 +22,10 @@ + #include + #include + #include ++#include + #include + ++#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-07-25 20:36:05.881329841 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.881329841 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:05.881329841 +0200 +@@ -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 ++ . */ ++ ++/* 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-07-25 20:36:05.881329841 +0200 +@@ -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-07-25 20:36:05.881329841 +0200 +@@ -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 ++ . */ + + #include <_lfs_64.h> + + #include + #include + #include ++#include + + 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-07-25 20:36:05.881329841 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:05.881329841 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:05.897329925 +0200 +@@ -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-07-25 20:36:05.897329925 +0200 +@@ -58,8 +58,6 @@ + * - Major code cleanup. + */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #include +@@ -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-07-25 20:36:05.909329987 +0200 +@@ -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 . */ + + #include + #include +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-07-25 20:36:05.909329987 +0200 +@@ -3,10 +3,14 @@ + #include + #include + +-#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-07-25 20:36:05.909329987 +0200 +@@ -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-07-25 20:36:05.909329987 +0200 +@@ -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 . */ + + #include + #include +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-07-25 20:36:05.909329987 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:05.929330092 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:05.929330092 +0200 +@@ -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-07-25 20:36:05.929330092 +0200 +@@ -149,10 +149,6 @@ + #ifdef __UCLIBC_HAS_WCHAR__ + #include + #endif +-#ifdef __UCLIBC_HAS_XLOCALE__ +-#include +-#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-07-25 20:36:05.953330218 +0200 +@@ -30,12 +30,11 @@ + #include + #include + #include +-#include + #include + #include + #include + #ifdef __UCLIBC_HAS_THREADS__ +-# include ++# include + #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-07-25 20:36:05.953330218 +0200 +@@ -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-07-25 20:36:05.957330238 +0200 +@@ -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-07-25 20:36:05.957330238 +0200 +@@ -19,32 +19,22 @@ + #include + #include + #include ++#ifdef __UCLIBC_HAS_UTMPX__ ++# include ++#endif + #include + + #include + __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-07-25 20:36:05.957330238 +0200 +@@ -13,6 +13,7 @@ + #include + #include + ++#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-07-25 20:36:05.957330238 +0200 +@@ -11,6 +11,9 @@ + #include + #include + #include ++#ifdef __UCLIBC_HAS_UTMPX__ ++# include ++#endif + #include + #include + #include +@@ -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-07-25 20:36:05.969330302 +0200 +@@ -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-07-25 20:36:05.969330302 +0200 +@@ -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 ++ * . + */ + + /* 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-07-25 20:36:05.985330385 +0200 +@@ -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-07-25 20:36:05.985330385 +0200 +@@ -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 ++ * . + */ + + /* 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 +-#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-07-25 20:36:05.997330448 +0200 +@@ -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-07-25 20:36:05.997330448 +0200 +@@ -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 . */ + + #include + #include ++#include + #include + #include + #include +@@ -36,6 +36,10 @@ + #include + #include + ++#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-07-25 20:36:06.017330553 +0200 +@@ -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 ++ . */ + + #include + #include +@@ -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-07-25 20:36:06.009330510 +0200 +@@ -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-07-25 20:36:06.017330553 +0200 +@@ -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-07-25 20:36:06.017330553 +0200 +@@ -34,9 +34,6 @@ + #ifdef __UCLIBC_HAS_SHADOW__ + #include + #endif +-#ifdef __UCLIBC_HAS_THREADS__ +-#include +-#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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + + #include + #include +-#include + #include + + /* 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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + + #include + #include + +- + /* 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-07-25 20:36:06.033330637 +0200 +@@ -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-07-25 20:36:06.033330637 +0200 +@@ -3,9 +3,7 @@ + */ + + #include +-#include + #include +-#include + + 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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + +-#include +-#include + #include +-#include + #include + +-#include +- +-#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 ++# include + + /* 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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + +-#include "sigsetops.h" ++#define __need_NULL ++#include ++#include ++#include + + /* 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-07-25 20:36:06.033330637 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + +-#define __UCLIBC_HIDE_DEPRECATED__ +-#include ++/*#define __UCLIBC_HIDE_DEPRECATED__*/ + #include + + #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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + +-#include "sigsetops.h" ++#define __need_NULL ++#include ++#include ++#include + + /* 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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + +-#include + #include +-#include +- ++#if 0 ++#define __need_NULL ++#include ++#include ++#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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + +-#include + #include +-#include + #ifdef __UCLIBC_HAS_THREADS_NATIVE__ + # include /* SIGCANCEL */ + #endif +- ++#if 0 ++#define __need_NULL ++#include ++#include ++#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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + + #define __UCLIBC_HIDE_DEPRECATED__ + #include + +- + 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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + + #define __need_NULL + #include + #include + +- + 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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + +-#include + #define __need_NULL + #include + #include +-#include /* For the real memset prototype. */ +- ++#include + + 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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + +-#include + #include +-#include +- + + /* 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 ++#else ++# include + #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-07-25 20:36:06.033330637 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + +-#include "sigsetops.h" ++#define __need_NULL ++#include ++#include ++#include + + /* 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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + ++#define __need_NULL + #include + #include + #include +-#include +- + + /* 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-07-25 20:36:06.033330637 +0200 +@@ -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 ++ . */ + + #include + #include + #include /* 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-07-25 20:36:06.037330658 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.037330658 +0200 +@@ -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 +-#define __FAVOR_BSD ++ License along with the GNU C Library; if not, see ++ . */ ++ + #include +-#include /* For NULL. */ +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include +-#endif ++#define __need_NULL ++#include ++#include + + #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-07-25 20:36:06.037330658 +0200 +@@ -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 ++ . */ + + #define __need_NULL + #include + #include + +- + 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-07-25 20:36:06.037330658 +0200 +@@ -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 ++ . */ + + #include + #define __need_NULL + #include + #include +-#include /* For the real memset prototype. */ +- ++#include + + /* 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-07-25 20:36:06.037330658 +0200 +@@ -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 ++ . */ ++ ++#ifndef _SIGSET_CVT_MASK_H ++#define _SIGSET_CVT_MASK_H + + #include + +@@ -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-07-25 20:36:06.037330658 +0200 +@@ -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 ++ . */ + +-#define __UCLIBC_HIDE_DEPRECATED__ +-#include ++/*#define __UCLIBC_HIDE_DEPRECATED__*/ + #include + + #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 +-#include +-#include +- +-#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-07-25 20:36:06.037330658 +0200 +@@ -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 ++ * License along with the GNU C Library; see the file COPYING.LIB. If ++ * not, see . ++ */ ++ ++#define __need_NULL ++#include ++#include + #include +-#include +-#include ++#include + +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-# include ++#if defined __NR_rt_sigtimedwait && defined __UCLIBC_HAS_REALTIME__ + +-# ifdef __NR_rt_sigtimedwait ++#include + + /* 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 /* 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-07-25 20:36:06.037330658 +0200 +@@ -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 ++ . */ + + #include + #include +-#include /* 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-07-25 20:36:06.045330699 +0200 +@@ -1,6 +1,7 @@ +-/* Copyright (C) 2004 Manuel Novoa III ++/* ++ * Copyright (C) 2000,2001,2003,2004 Manuel Novoa III + * +- * 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 + #include + #include +-#include ++#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-07-25 20:36:06.045330699 +0200 +@@ -0,0 +1,49 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Copyright (C) 2000,2001,2003,2004 Manuel Novoa III ++ * ++ * 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 ++#ifdef __UCLIBC_HAS_FLOATS__ ++ ++#define __need_size_t ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* 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-07-25 20:36:06.049330721 +0200 +@@ -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-07-25 20:36:06.049330721 +0200 +@@ -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-07-25 20:36:06.049330721 +0200 +@@ -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-07-25 20:36:06.049330721 +0200 +@@ -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-07-25 20:36:06.045330699 +0200 +@@ -8,7 +8,6 @@ + #include "_stdio.h" + #include + +-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-07-25 20:36:06.041330678 +0200 +@@ -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-07-25 20:36:06.049330721 +0200 +@@ -127,9 +127,7 @@ + + /**************************************************************************/ + +-#define _ISOC99_SOURCE /* for ULLONG primarily... */ + #include "_stdio.h" +-/* #include */ + #include + #include + #include +@@ -137,14 +135,9 @@ + #include + #include + #include +-#include + +-#ifdef __UCLIBC_HAS_THREADS__ +-#include +-#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 +-#include +- +-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-07-25 20:36:06.049330721 +0200 +@@ -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-07-25 20:36:06.049330721 +0200 +@@ -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 +-#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-07-25 20:36:06.049330721 +0200 +@@ -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-07-25 20:36:06.045330699 +0200 +@@ -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 ++ * . + */ + + /* Aug 1, 2003 +@@ -43,7 +43,6 @@ + * standards and from an official C standard defect report. + */ + +-#define _ISOC99_SOURCE /* for LLONG_MAX primarily... */ + #include + #include "_stdio.h" + #include +@@ -77,14 +76,6 @@ + #include + #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-07-25 20:36:06.045330699 +0200 +@@ -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 +-#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-07-25 20:36:06.045330699 +0200 +@@ -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-07-25 20:36:06.045330699 +0200 +@@ -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-07-25 20:36:06.049330721 +0200 +@@ -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 . */ + + #include + #include +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-07-25 20:36:06.049330721 +0200 +@@ -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 . */ + + #include + #include +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-07-25 20:36:06.049330721 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.049330721 +0200 +@@ -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 . */ + + #include + #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-07-25 20:36:06.045330699 +0200 +@@ -5,7 +5,6 @@ + * Dedicated to Toni. See uClibc/DEDICATION.mjn3 for details. + */ + +-#define _ISOC99_SOURCE /* for ULLONG primarily... */ + #include "_stdio.h" + #include + #include +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-07-25 20:36:06.045330699 +0200 +@@ -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 ++ * . + */ + + /* 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 + #include "_stdio.h" + #include +@@ -101,7 +100,6 @@ + #include + #include + #include +-#include + + #ifdef __UCLIBC_HAS_THREADS__ + # include +@@ -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 +-# include +-#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-07-25 20:36:06.061330784 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.061330784 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:06.061330784 +0200 +@@ -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 . ++ * Copyright (c) 1996, David Mazieres + * +- * 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 ++ + #include + #include + #include + #include +-#include + #include +-#ifdef __ARC4RANDOM_USE_ERANDOM__ +-#include +-#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 +-#include +- +-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-07-25 20:36:06.061330784 +0200 +@@ -40,11 +40,12 @@ + #include + #include + #include ++#include + #include + #include + + #include +-__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-07-25 20:36:06.061330784 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:06.065330804 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.061330784 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.065330804 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.065330804 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.065330804 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.065330804 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:06.065330804 +0200 +@@ -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 . */ + + #include + #include +@@ -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-07-25 20:36:06.065330804 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.065330804 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.065330804 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.065330804 +0200 +@@ -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 ++ ++#if defined __USE_SVID || defined __USE_XOPEN ++#include ++#include ++#include ++ ++static int __lcong48_r (unsigned short int param[7], struct drand48_data *buffer) ++{ ++ /* Store the given values. */ ++ memcpy (buffer->__x, ¶m[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-07-25 20:36:06.065330804 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.065330804 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.065330804 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.065330804 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.061330784 +0200 +@@ -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-07-25 20:36:06.109331035 +0200 +@@ -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 ++ * . + */ + + #include +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-07-25 20:36:06.109331035 +0200 +@@ -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-07-25 20:36:06.109331035 +0200 +@@ -13,18 +13,13 @@ + + #include + +- +-/* On multi-threaded systems, the heap includes a lock. */ ++#include + #ifdef __UCLIBC_HAS_THREADS__ +-# include + # 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-07-25 20:36:06.109331035 +0200 +@@ -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-07-25 20:36:06.109331035 +0200 +@@ -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-07-25 20:36:06.109331035 +0200 +@@ -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 + +-/* Locking for multithreaded apps. */ + #ifdef __UCLIBC_HAS_THREADS__ +- +-# include +- + # 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-07-25 20:36:06.109331035 +0200 +@@ -14,7 +14,6 @@ + #include + #include + #include +-#include /* 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-07-25 20:36:06.081330888 +0200 +@@ -17,6 +17,7 @@ + #include + #include + ++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-07-25 20:36:06.081330888 +0200 +@@ -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-07-25 20:36:06.097330972 +0200 +@@ -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-07-25 20:36:06.097330972 +0200 +@@ -15,6 +15,7 @@ + */ + + #include "malloc.h" ++#include /* 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-07-25 20:36:06.097330972 +0200 +@@ -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 + +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-07-25 20:36:06.097330972 +0200 +@@ -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-07-25 20:36:06.109331035 +0200 +@@ -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 . */ + + #include + #include +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-07-25 20:36:06.109331035 +0200 +@@ -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 ++ . */ ++ ++#include ++#include ++#include ++#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-07-25 20:36:06.109331035 +0200 +@@ -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 ++ . */ ++ ++#include ++#include ++#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-07-25 20:36:06.109331035 +0200 +@@ -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 . */ + + #include + #include +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-07-25 20:36:06.109331035 +0200 +@@ -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 . */ + + #include + #include +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-07-25 20:36:06.109331035 +0200 +@@ -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 . */ + + #include + #include +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-07-25 20:36:06.109331035 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.109331035 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.109331035 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.109331035 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.109331035 +0200 +@@ -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 ++ * . + */ + + #include +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-07-25 20:36:06.109331035 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.109331035 +0200 +@@ -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 . */ + + #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-07-25 20:36:06.109331035 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.113331056 +0200 +@@ -0,0 +1,7 @@ ++/* Copyright (C) 2012 Bernhard Reutner-Fischer ++ * ++ * 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-07-25 20:36:06.113331056 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.113331056 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.113331056 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, 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 . + + modified for uClibc by Erik Andersen + */ +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-07-25 20:36:06.113331056 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.113331056 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.113331056 +0200 +@@ -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 ++ * . + */ + + /* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION! +@@ -32,58 +32,8 @@ + * Add wscto{inttype} functions. + */ + +-#define _ISOC99_SOURCE /* for ULLONG primarily... */ + #include + #include +-/* 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 + #include + #include +@@ -100,10 +50,6 @@ + #include + #include + +-#ifdef __UCLIBC_HAS_XLOCALE__ +-#include +-#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-07-25 20:36:06.061330784 +0200 +@@ -95,7 +95,6 @@ + + /**********************************************************************/ + +-#define _ISOC99_SOURCE 1 + #include + #include + #include +@@ -112,10 +111,6 @@ + # include + #endif + +-#ifdef __UCLIBC_HAS_XLOCALE__ +-# include +-#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-07-25 20:36:06.113331056 +0200 +@@ -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 +-#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-07-25 20:36:06.061330784 +0200 +@@ -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 . + + */ + +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-07-25 20:36:06.113331056 +0200 +@@ -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 . */ + + #include + #include +@@ -31,12 +30,6 @@ + #include "pty-private.h" + + +-/* uClinux-2.0 has vfork, but Linux 2.0 doesn't */ +-#include +-#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-07-25 20:36:06.113331056 +0200 +@@ -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 . */ + + #include + #include +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-07-25 20:36:06.113331056 +0200 +@@ -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 . + + 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-07-25 20:36:06.149331244 +0200 +@@ -0,0 +1,13 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2005 Erik Andersen ++# ++# 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-07-25 20:36:06.149331244 +0200 +@@ -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 ++#include ++ ++#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-07-25 20:36:06.149331244 +0200 +@@ -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 ++ ++/* 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-07-25 20:36:06.149331244 +0200 +@@ -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 ++ ++#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-07-25 20:36:06.149331244 +0200 +@@ -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 ++#include ++ ++/* 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-07-25 20:36:06.149331244 +0200 +@@ -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 ++#include ++ ++/* 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 ; ++ 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-07-25 20:36:06.149331244 +0200 +@@ -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 ++ ++/* 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-07-25 20:36:06.149331244 +0200 +@@ -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 ++ ++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/memcmp.S uClibc-git/libc/string/arm/memcmp.S +--- uClibc-0.9.33.2/libc/string/arm/memcmp.S 2012-05-15 09:20:09.000000000 +0200 ++++ uClibc-git/libc/string/arm/memcmp.S 2014-07-25 20:36:06.161331307 +0200 +@@ -31,6 +31,7 @@ + + #include + #include ++#include + + .text + .global memcmp +diff -Nur uClibc-0.9.33.2/libc/string/arm/_memcpy.S uClibc-git/libc/string/arm/_memcpy.S +--- uClibc-0.9.33.2/libc/string/arm/_memcpy.S 2012-05-15 09:20:09.000000000 +0200 ++++ uClibc-git/libc/string/arm/_memcpy.S 2014-07-25 20:36:06.161331307 +0200 +@@ -40,6 +40,7 @@ + #include + #include + #include ++#include + + #if !defined(THUMB1_ONLY) + /* +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-07-25 20:36:06.161331307 +0200 +@@ -13,13 +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 ++ . */ + + #include + #include + #include ++#include + + .text + .global memset +diff -Nur uClibc-0.9.33.2/libc/string/arm/strcmp.S uClibc-git/libc/string/arm/strcmp.S +--- uClibc-0.9.33.2/libc/string/arm/strcmp.S 2012-05-15 09:20:09.000000000 +0200 ++++ uClibc-git/libc/string/arm/strcmp.S 2014-07-25 20:36:06.161331307 +0200 +@@ -31,6 +31,7 @@ + + #include + #include ++#include + + .text + .global strcmp +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-07-25 20:36:06.161331307 +0200 +@@ -13,14 +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 ++ . */ + + #include + #include + #include + #include ++#include + + /* size_t strlen(const char *S) + * entry: r0 -> string +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-07-25 20:36:06.181331412 +0200 +@@ -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 . + + 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-07-25 20:36:06.181331412 +0200 +@@ -5,7 +5,7 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include "_string.h" ++#include + + #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-07-25 20:36:06.181331412 +0200 +@@ -5,11 +5,9 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include "_string.h" ++#include + + #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-07-25 20:36:06.193331475 +0200 +@@ -5,7 +5,7 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include "_string.h" ++#include + + #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-07-25 20:36:06.137331182 +0200 +@@ -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-07-25 20:36:06.209331558 +0200 +@@ -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 . */ + + #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-07-25 20:36:06.213331580 +0200 +@@ -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 ++ . */ + + #include + +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-07-25 20:36:06.213331580 +0200 +@@ -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 + #include + + 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-07-25 20:36:06.213331580 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.225331642 +0200 +@@ -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 ++ * . + */ + + #include +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-07-25 20:36:06.225331642 +0200 +@@ -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 ++ * . + */ + + #include +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-07-25 20:36:06.237331706 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:06.237331706 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:06.237331706 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.237331706 +0200 +@@ -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 ++ . */ + + #include + #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-07-25 20:36:06.237331706 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.237331706 +0200 +@@ -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 ++ . */ + + #include + +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-07-25 20:36:06.237331706 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:06.237331706 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:06.237331706 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.237331706 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:06.237331706 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:06.237331706 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:06.237331706 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:06.237331706 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.237331706 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.237331706 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.237331706 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:06.237331706 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.237331706 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:06.237331706 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:06.241331726 +0200 +@@ -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 . */ + + #include + #include +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-07-25 20:36:06.241331726 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.241331726 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.241331726 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.241331726 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * 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-07-25 20:36:06.241331726 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.133331160 +0200 +@@ -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 + #include + ++#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-07-25 20:36:06.265331852 +0200 +@@ -1,4 +1,4 @@ +-#include "sysdep.h" ++#include + + #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-07-25 20:36:06.265331852 +0200 +@@ -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 ++ . */ + + /* 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 + + #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-07-25 20:36:06.265331852 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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 + #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-07-25 20:36:06.265331852 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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 + #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-07-25 20:36:06.265331852 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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 + #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-07-25 20:36:06.265331852 +0200 +@@ -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 ++ . */ + + /* Return: dest + +@@ -37,7 +36,7 @@ + + #define USE_LFETCH + #define USE_FLP +-#include "sysdep.h" ++#include + #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-07-25 20:36:06.265331852 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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 + #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-07-25 20:36:06.265331852 +0200 +@@ -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 ++ . */ + + /* 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 + #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-07-25 20:36:06.265331852 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.265331852 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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 + #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-07-25 20:36:06.265331852 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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 + #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-07-25 20:36:06.265331852 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* Return: dest + +@@ -31,7 +30,7 @@ + shr.u tmp = r[0], sh2 // tmp = w1 >> sh2 + */ + +-#include "sysdep.h" ++#include + #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-07-25 20:36:06.265331852 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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 + #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-07-25 20:36:06.265331852 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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 + #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-07-25 20:36:06.265331852 +0200 +@@ -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 ++ . */ + + /* Return: dest + +@@ -29,7 +28,7 @@ + In this form, it assumes little endian mode. + */ + +-#include "sysdep.h" ++#include + #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, , 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 +-#include +- +-#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-07-25 20:36:06.265331852 +0200 +@@ -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-07-25 20:36:06.277331914 +0200 +@@ -0,0 +1,13 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2005 Erik Andersen ++# ++# 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-07-25 20:36:06.277331914 +0200 +@@ -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-07-25 20:36:06.277331914 +0200 +@@ -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-07-25 20:36:06.277331914 +0200 +@@ -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-07-25 20:36:06.277331914 +0200 +@@ -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-07-25 20:36:06.277331914 +0200 +@@ -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 ++ ++ .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-07-25 20:36:06.277331914 +0200 +@@ -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 ++ ++ .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-07-25 20:36:06.277331914 +0200 +@@ -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-07-25 20:36:06.289331978 +0200 +@@ -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-07-25 20:36:06.289331978 +0200 +@@ -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-07-25 20:36:06.301332040 +0200 +@@ -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 ++ . */ + + #include +-/*#include */ ++#include + #include +-#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-07-25 20:36:06.301332040 +0200 +@@ -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 ++ . */ + + #include +-/*#include */ ++#include + #include +-#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 +-#include +- +-#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-07-25 20:36:06.369332397 +0200 +@@ -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 ++ . */ + + .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-07-25 20:36:06.369332397 +0200 +@@ -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 ++ . */ + + #include + +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-07-25 20:36:06.369332397 +0200 +@@ -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 ++ . */ + + #include + +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-07-25 20:36:06.377332438 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:06.377332438 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:06.377332438 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:06.377332438 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:06.377332438 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:06.377332438 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:06.389332501 +0200 +@@ -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 ++ . */ + + #include + #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-07-25 20:36:06.389332501 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:06.389332501 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:06.401332564 +0200 +@@ -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 ++ . */ + + #include + +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-07-25 20:36:06.401332564 +0200 +@@ -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 ++ . */ + + #include + #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-07-25 20:36:06.401332564 +0200 +@@ -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 ++ . */ + + #include + #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-07-25 20:36:06.401332564 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:06.401332564 +0200 +@@ -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 ++ . */ + + #include + #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-07-25 20:36:06.401332564 +0200 +@@ -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 ++ . */ + + #include + #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-07-25 20:36:06.401332564 +0200 +@@ -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 ++ . */ + + #include + +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-07-25 20:36:06.401332564 +0200 +@@ -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-07-25 20:36:06.401332564 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:06.441332774 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.441332774 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:06.441332774 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:06.441332774 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.441332774 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:06.441332774 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.441332774 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:06.441332774 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.441332774 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:06.133331160 +0200 +@@ -5,7 +5,6 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include "_string.h" + #include + + 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-07-25 20:36:06.133331160 +0200 +@@ -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 + #include +@@ -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-07-25 20:36:06.457332858 +0200 +@@ -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 ++ . */ + +-#include "../../sysdeps/linux/xtensa/sysdep.h" ++#include + #include + + .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-07-25 20:36:06.457332858 +0200 +@@ -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 ++ . */ + +-#include "../../sysdeps/linux/xtensa/sysdep.h" ++#include + #include + + /* 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-07-25 20:36:06.457332858 +0200 +@@ -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 ++ . */ + +-#include "../../sysdeps/linux/xtensa/sysdep.h" ++#include + #include + #include + +@@ -35,13 +34,14 @@ + + #define MASK4 0x40404040 + ++ .text ++ .align 4 ++ .literal_position + .literal .Lmask0, MASK0 + .literal .Lmask1, MASK1 + .literal .Lmask2, MASK2 + .literal .Lmask3, MASK3 + .literal .Lmask4, MASK4 +- +- .text + ENTRY (strcmp) + /* a2 = s1, a3 = s2 */ + +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-07-25 20:36:06.457332858 +0200 +@@ -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 ++ . */ + +-#include "../../sysdeps/linux/xtensa/sysdep.h" ++#include + #include + + #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-07-25 20:36:06.457332858 +0200 +@@ -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 ++ . */ + +-#include "../../sysdeps/linux/xtensa/sysdep.h" ++#include + #include + + #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-07-25 20:36:06.457332858 +0200 +@@ -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 ++ . */ + +-#include "../../sysdeps/linux/xtensa/sysdep.h" ++#include + #include + + #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-07-25 20:36:06.501333088 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.501333088 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.501333088 +0200 +@@ -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 ++ . */ ++ ++#ifndef _SYS_EVENTFD_H ++# error "Never use directly; include 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-07-25 20:36:06.501333088 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:06.501333088 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FENV_H + # error "Never use directly; include 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-07-25 20:36:06.501333088 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_IOCTL_H + # error "Never use directly; include 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-07-25 20:36:06.501333088 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_IPC_H + # error "Never use directly; include 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-07-25 20:36:06.501333088 +0200 +@@ -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-07-25 20:36:06.501333088 +0200 +@@ -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-07-25 20:36:06.501333088 +0200 +@@ -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 . */ ++ ++/* 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 ++ ++/* 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-07-25 20:36:06.501333088 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _MATH_H && !defined _COMPLEX_H + # error "Never use directly; include 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-07-25 20:36:06.501333088 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _MATH_H + # error "Never use directly; include 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-07-25 20:36:06.501333088 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_MMAN_H + # error "Never use directly; include 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-07-25 20:36:06.501333088 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_MSG_H + # error "Never use directly; include 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-07-25 20:36:06.501333088 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _NETDB_H + # error "Never include directly; use 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-07-25 20:36:06.501333088 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_RESOURCE_H + # error "Never use directly; include 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-07-25 20:36:06.501333088 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SEM_H + # error "Never include directly; use 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-07-25 20:36:06.501333088 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.501333088 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SHM_H + # error "Never include directly; use 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-07-25 20:36:06.501333088 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SIGNAL_H + # error "Never include directly; use 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-07-25 20:36:06.505333109 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.505333109 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.505333109 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.505333109 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SIGNAL_H + # error "Never include this file directly. Use 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-07-25 20:36:06.505333109 +0200 +@@ -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 ++ . */ ++ ++#ifndef _SYS_SOCKET_H ++# error "Never include directly; use 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-07-25 20:36:06.505333109 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.505333109 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STATFS_H + # error "Never include directly; use 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-07-25 20:36:06.505333109 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STAT_H + # error "Never include directly; use 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-07-25 20:36:06.505333109 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.505333109 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _TERMIOS_H + # error "Never include directly; use 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-07-25 20:36:06.505333109 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _BITS_TYPES_H + # error "Never include directly; use 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-07-25 20:36:06.505333109 +0200 +@@ -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-07-25 20:36:06.505333109 +0200 +@@ -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 ++ * . + */ + + /* 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-07-25 20:36:06.505333109 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.505333109 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* __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-07-25 20:36:06.505333109 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.505333109 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:06.505333109 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.505333109 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.505333109 +0200 +@@ -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 ++ . */ ++ ++#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-07-25 20:36:06.505333109 +0200 +@@ -0,0 +1,23 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++#include ++ ++/* 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 ++#include ++ ++#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-07-25 20:36:06.489333026 +0200 +@@ -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 ++ . */ + +-#include +-#define _SETJMP_H +-#define __ASSEMBLY__ +-#include ++#include + + #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-07-25 20:36:06.489333026 +0200 +@@ -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-07-25 20:36:06.505333109 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.505333109 +0200 +@@ -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 +-#define _ASM +-#define _SETJMP_H +-#define __ASSEMBLY__ +-#include ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include + + #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-07-25 20:36:06.505333109 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.513333151 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.513333151 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.513333151 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.513333151 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.513333151 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.489333026 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:06.513333151 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.549333339 +0200 +@@ -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 +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-07-25 20:36:06.549333339 +0200 +@@ -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 directly; include 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-07-25 20:36:06.549333339 +0200 +@@ -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 directly; include instead." ++#endif ++ ++ ++#include ++#ifdef __USE_GNU ++# include ++#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-07-25 20:36:06.549333339 +0200 +@@ -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-07-25 20:36:06.549333339 +0200 +@@ -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 directly; use 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-07-25 20:36:06.549333339 +0200 +@@ -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 ++#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-07-25 20:36:06.549333339 +0200 +@@ -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-07-25 20:36:06.549333339 +0200 +@@ -0,0 +1,183 @@ ++/* ++ * 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 directly; include instead." ++#endif ++ ++#ifndef __ASSEMBLER__ ++ ++#include ++ ++/* ++ * 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 */ ++ ++/* -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 ++ * -Gets syscall name (conv to __NR_xxx) ++ * -sets errno, return success/error-codes ++ */ ++#define INLINE_SYSCALL(name, nr_args, args...) \ ++({ \ ++ register int __res __asm__("r0"); \ ++ __res = INTERNAL_SYSCALL_NCS(__NR_##name, , nr_args, args); \ ++ if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P ((__res), ), 0)) \ ++ { \ ++ ERRNO_ERRANDS(__res); \ ++ } \ ++ __res; \ ++}) ++ ++/* variant of INLINE_SYSCALL, gets syscall number ++ */ ++#define INLINE_SYSCALL_NCS(num, nr_args, args...) \ ++({ \ ++ register int __res __asm__("r0"); \ ++ __res = INTERNAL_SYSCALL_NCS(num, , nr_args, args); \ ++ if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P ((__res), ), 0)) \ ++ { \ ++ ERRNO_ERRANDS(__res); \ ++ } \ ++ __res; \ ++}) ++ ++/*------------------------------------------------------------------------- ++ * 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-07-25 20:36:06.549333339 +0200 +@@ -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-07-25 20:36:06.549333339 +0200 +@@ -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 ++ ++/* 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-07-25 20:36:06.549333339 +0200 +@@ -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-07-25 20:36:06.549333339 +0200 +@@ -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 ++ ++;@ 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/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-07-25 20:36:06.549333339 +0200 +@@ -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 ++ ++;@ 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/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-07-25 20:36:06.549333339 +0200 +@@ -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 ++#include ++ ++_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-07-25 20:36:06.549333339 +0200 +@@ -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 ++#include ++#include ++ ++; 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, and returns here ++ jl.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-07-25 20:36:06.549333339 +0200 +@@ -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 ++ ++.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-07-25 20:36:06.549333339 +0200 +@@ -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-07-25 20:36:06.549333339 +0200 +@@ -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-07-25 20:36:06.549333339 +0200 +@@ -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-07-25 20:36:06.549333339 +0200 +@@ -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 ++#include ++ ++/* 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-07-25 20:36:06.533333255 +0200 +@@ -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 ++ ++;@ 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-07-25 20:36:06.533333255 +0200 +@@ -0,0 +1,13 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2005 Erik Andersen ++# ++# 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-07-25 20:36:06.533333255 +0200 +@@ -0,0 +1,11 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2005 Erik Andersen ++# ++# 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-07-25 20:36:06.549333339 +0200 +@@ -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 ++ ++;@ 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-07-25 20:36:06.549333339 +0200 +@@ -0,0 +1,52 @@ ++/* ++ * 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 ++#include ++#include ++#include ++#include ++ ++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 ++# ifndef __UCLIBC_HAS_THREADS__ ++strong_alias(__libc_sigaction,sigaction) ++libc_hidden_def(sigaction) ++# else ++weak_alias(__libc_sigaction,sigaction) ++libc_hidden_weak(sigaction) ++# endif ++#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-07-25 20:36:06.549333339 +0200 +@@ -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 ++#include ++ ++/* ++ * 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-07-25 20:36:06.565333423 +0200 +@@ -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 ++ ++__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-07-25 20:36:06.565333423 +0200 +@@ -0,0 +1,109 @@ ++/* ++ * 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 ++#include ++#include ++#include ++ ++__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 40 ++typedef elf_greg_t elf_gregset_t[ELF_NGREG]; ++typedef struct { } elf_fpregset_t; ++ ++/* 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 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/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-07-25 20:36:06.565333423 +0200 +@@ -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 ++#include ++#include ++ ++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-07-25 20:36:06.565333423 +0200 +@@ -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-07-25 20:36:06.565333423 +0200 +@@ -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 ++#include ++#include ++#include ++ ++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-07-25 20:36:06.533333255 +0200 +@@ -0,0 +1,15 @@ ++/* Wrapper for setting errno. ++ * ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include ++#include ++ ++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-07-25 20:36:06.565333423 +0200 +@@ -0,0 +1,22 @@ ++#ifndef _LINUX_ARC_SYSDEP_H ++#define _LINUX_ARC_SYSDEP_H 1 ++ ++#include ++#include ++ ++#ifdef __ASSEMBLER__ ++ ++#define ENTRY(nm) \ ++ .text ` \ ++ .align 4 ` \ ++ .globl nm ` \ ++ .type nm,@function ` \ ++nm: ++ ++#define END(name) .size name,.-name ++ ++#endif /* __ASSEMBLER __*/ ++ ++#include ++ ++#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-07-25 20:36:06.565333423 +0200 +@@ -0,0 +1,31 @@ ++/* ++ * 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 ++#include ++ ++/* No legacy syscall ABI means NR_vfork is not available at all, use clone */ ++#define _SIGNAL_H ++#include /* 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) ++ ++weak_alias(__vfork,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-07-25 20:36:06.565333423 +0200 +@@ -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-07-25 20:36:06.577333486 +0200 +@@ -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 ++ . */ + + #undef NDEBUG + #include + #include + + +-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-07-25 20:36:06.577333486 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.577333486 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.577333486 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:06.577333486 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.577333486 +0200 +@@ -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 ++ . */ + + #include + +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-07-25 20:36:06.577333486 +0200 +@@ -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 ++ . */ + + #include + #include + #include + +-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-07-25 20:36:06.577333486 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.577333486 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.577333486 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.577333486 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.577333486 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:06.577333486 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.593333569 +0200 +@@ -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 +@@ -24,12 +26,4 @@ + #define THUMB1_ONLY 1 + #endif + +-#if defined(__USE_BX__) +-# if ( defined (__ARM_ARCH_2__) || defined (__ARM_ARCH_3__) \ +- || defined (__ARM_ARCH_3M__) || defined (__ARM_ARCH_4__) \ +- ) +-# error Use of BX was requested, but is not available on the target processor. +-# endif /* ARCH level */ +-#endif /* __USE_BX__ */ +- + #endif /* _ARM_ASM_H */ +diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/arm_bx.h uClibc-git/libc/sysdeps/linux/arm/bits/arm_bx.h +--- uClibc-0.9.33.2/libc/sysdeps/linux/arm/bits/arm_bx.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-git/libc/sysdeps/linux/arm/bits/arm_bx.h 2014-07-25 20:36:06.593333569 +0200 +@@ -0,0 +1,34 @@ ++/* Copyright (C) 2013 Yann E. MORIN ++ * ++ * This file 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. ++ * ++ * This file 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 ++ * . ++ */ ++ ++#ifndef _ARM_BX_H ++#define _ARM_BX_H ++ ++/* We need features.h first */ ++#if !defined _FEATURES_H ++#error Please include features.h first ++#endif /* features.h not yet included */ ++ ++#if defined(__USE_BX__) ++# if ( defined (__ARM_ARCH_2__) || defined (__ARM_ARCH_3__) \ ++ || defined (__ARM_ARCH_3M__) || defined (__ARM_ARCH_4__) \ ++ ) ++# error Use of BX was requested, but is not available on the target processor. ++# endif /* ARCH level */ ++#endif /* __USE_BX__ */ ++ ++#endif /* _ARM_BX_H */ +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-07-25 20:36:06.593333569 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.593333569 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if defined __thumb__ && !defined __thumb2__ + #include_next +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-07-25 20:36:06.593333569 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:06.593333569 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FENV_H + # error "Never use directly; include 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-07-25 20:36:06.593333569 +0200 +@@ -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 ++ . */ + + #ifndef _MATH_H + # error "Never use directly; include 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-07-25 20:36:06.593333569 +0200 +@@ -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-07-25 20:36:06.593333569 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _MATH_H && !defined _COMPLEX_H + # error "Never use directly; include 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-07-25 20:36:06.593333569 +0200 +@@ -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 ++ . */ + + /* 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 directly; use 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-07-25 20:36:06.593333569 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SHM_H + # error "Never include directly; use 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-07-25 20:36:06.593333569 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.593333569 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.593333569 +0200 +@@ -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 ++# 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-07-25 20:36:06.593333569 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:06.593333569 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.593333569 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.593333569 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.593333569 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* clone() is even more special than fork() as it mucks with stacks + and invokes a function in the right context after its all over. */ +@@ -25,6 +24,7 @@ + #include + #include + #include ++#include + + #if defined(__NR_clone) + /* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */ +@@ -111,8 +111,9 @@ + ldr r4, [sp, #12] + DO_CALL (clone) + movs a1, a1 +- blt __error ++ IT(t, ne) + 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-07-25 20:36:06.593333569 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:06.593333569 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.593333569 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.593333569 +0200 +@@ -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 ++ . */ ++ ++#include ++ ++#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-07-25 20:36:06.593333569 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.593333569 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.593333569 +0200 +@@ -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 ++ . */ ++ ++#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-07-25 20:36:06.593333569 +0200 +@@ -0,0 +1,29 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++#include ++ ++/* 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 ++#include ++ ++/* 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-07-25 20:36:06.577333486 +0200 +@@ -13,16 +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 ++ . */ + + #include + #include +-#define _SETJMP_H +-#define _ASM +-#include +- ++#include + + .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-07-25 20:36:06.593333569 +0200 +@@ -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 ++ . */ ++ ++#include ++#include ++ ++/* 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-07-25 20:36:06.577333486 +0200 +@@ -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 \ +- | 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 | 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-07-25 20:36:06.593333569 +0200 +@@ -12,17 +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 ++ . */ + +-#include ++#include <_lfs_64.h> + #define _ERRNO_H + #include + #include + #include ++#include + +-#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 +- * +- * GNU Library General Public License (LGPL) version 2 or later. +- */ +-#include +-#include +-#include +-#include +- +-#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 +- * +- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +- */ +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#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 +- * +- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +- */ +-#include +-#include +- +-#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-07-25 20:36:06.593333569 +0200 +@@ -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 ++ . */ ++ ++#include ++ ++#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-07-25 20:36:06.593333569 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.593333569 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. ++ License along with the GNU C Library; if not, see ++ . + + Totally hacked up for uClibc by Erik Andersen + */ +@@ -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-07-25 20:36:06.593333569 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.593333569 +0200 +@@ -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 ++ . */ ++ ++#include ++ ++#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-07-25 20:36:06.609333653 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.609333653 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.609333653 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.609333653 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.609333653 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.609333653 +0200 +@@ -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 ++ . */ + + #include + #include ++#include + + /* In the EABI syscall interface, we don't need a special syscall to + implement syscall(). It won't work reliably with 64-bit arguments +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-07-25 20:36:06.609333653 +0200 +@@ -13,15 +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 ++ . */ + + #ifndef _LINUX_ARM_SYSDEP_H + #define _LINUX_ARM_SYSDEP_H 1 + + #include +-#include ++#include + + #include + /* For Linux we can use the system call table in the header file +@@ -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-07-25 20:36:06.609333653 +0200 +@@ -0,0 +1,30 @@ ++#include ++#include ++#include ++#include ++ ++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-07-25 20:36:06.609333653 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:06.609333653 +0200 +@@ -7,6 +7,7 @@ + + #include + #include ++#include + + #define _ERRNO_H + #include +@@ -104,5 +105,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-07-25 20:36:06.629333758 +0200 +@@ -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-07-25 20:36:06.629333758 +0200 +@@ -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-07-25 20:36:06.629333758 +0200 +@@ -12,19 +12,10 @@ + # error "Never include directly; use 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-07-25 20:36:06.629333758 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.629333758 +0200 +@@ -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-07-25 20:36:06.629333758 +0200 +@@ -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-07-25 20:36:06.629333758 +0200 +@@ -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 ++#include ++ ++/* 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-07-25 20:36:06.617333696 +0200 +@@ -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 . + + 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-07-25 20:36:06.617333696 +0200 +@@ -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-07-25 20:36:06.629333758 +0200 +@@ -12,10 +12,10 @@ + #include + + +-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-07-25 20:36:06.629333758 +0200 +@@ -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 + + .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-07-25 20:36:06.629333758 +0200 +@@ -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-07-25 20:36:06.645333842 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.645333842 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.645333842 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.645333842 +0200 +@@ -17,10 +17,10 @@ + * Fortunately, the Linux kernel preserves LR across system calls. + */ + +-#include + #include + + .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-07-25 20:36:06.677334010 +0200 +@@ -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 . */ + + #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-07-25 20:36:06.677334010 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:06.677334010 +0200 +@@ -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 ++ . */ + + #ifndef _MATH_H + # error "Never use directly; include 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-07-25 20:36:06.677334010 +0200 +@@ -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-07-25 20:36:06.677334010 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* Define the machine-dependent type `jmp_buf'. bfin version. Lineo, Inc. 2001*/ + #ifndef _BITS_SETJMP_H +@@ -24,7 +23,6 @@ + # error "Never include directly; use 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-07-25 20:36:06.677334010 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.677334010 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.677334010 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _BITS_TYPES_H + # error "Never include directly; use 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-07-25 20:36:06.677334010 +0200 +@@ -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-07-25 20:36:06.677334010 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:06.677334010 +0200 +@@ -6,9 +6,10 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +-#include + #include +-#include + +-_syscall3 (int, cacheflush, void *, start, const int, nbytes, const int, flags) ++#ifdef __NR_cacheflush ++# include ++ ++_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-07-25 20:36:06.677334010 +0200 +@@ -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 . */ + + + /* 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-07-25 20:36:06.677334010 +0200 +@@ -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 ++. */ + + /* 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-07-25 20:36:06.677334010 +0200 +@@ -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 ++. */ + + /* 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-07-25 20:36:06.677334010 +0200 +@@ -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 . */ + + #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-07-25 20:36:06.677334010 +0200 +@@ -0,0 +1,8 @@ ++/* Private macros for accessing __jmp_buf contents. BFIN version. */ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * 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-07-25 20:36:06.677334010 +0200 +@@ -0,0 +1,11 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++ ++/* 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-07-25 20:36:06.661333926 +0200 +@@ -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-07-25 20:36:06.689334073 +0200 +@@ -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-07-25 20:36:06.689334073 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.689334073 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.689334073 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.689334073 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.721334241 +0200 +@@ -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 ++ * . + */ + + #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-07-25 20:36:06.721334241 +0200 +@@ -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 . */ + + #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-07-25 20:36:06.721334241 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:06.721334241 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_IPC_H + # error "Never use directly; include 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-07-25 20:36:06.721334241 +0200 +@@ -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-07-25 20:36:06.721334241 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _MATH_H && !defined _COMPLEX_H + # error "Never use directly; include 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-07-25 20:36:06.721334241 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _MATH_H + # error "Never use directly; include 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-07-25 20:36:06.721334241 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_POLL_H + # error "Never use directly; include 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-07-25 20:36:06.721334241 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_RESOURCE_H + # error "Never use directly; include 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-07-25 20:36:06.721334241 +0200 +@@ -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 ++ * . + */ + +-#ifndef _SETJMP_H ++#ifndef _BITS_SETJMP_H ++#define _BITS_SETJMP_H 1 ++ ++#if !defined _SETJMP_H && !defined _PTHREAD_H + # error "Never include directly; use 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-07-25 20:36:06.721334241 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.721334241 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.721334241 +0200 +@@ -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-07-25 20:36:06.721334241 +0200 +@@ -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-07-25 20:36:06.721334241 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:06.721334241 +0200 +@@ -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 ++ * . + */ + + #include +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-07-25 20:36:06.721334241 +0200 +@@ -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 . + ; + + .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-07-25 20:36:06.721334241 +0200 +@@ -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 . + ; + + .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-07-25 20:36:06.721334241 +0200 +@@ -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 . + ; + #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-07-25 20:36:06.721334241 +0200 +@@ -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 . + ; + + .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-07-25 20:36:06.721334241 +0200 +@@ -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 ++ * . ++ */ ++ ++/* 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-07-25 20:36:06.721334241 +0200 +@@ -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 ++ * . ++ */ ++#include ++#include ++ ++/* 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-07-25 20:36:06.709334178 +0200 +@@ -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 . + ; + + .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-07-25 20:36:06.709334178 +0200 +@@ -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 +- * 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 +-#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 +-#include +-#include +-#include +-#include +- +-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-07-25 20:36:06.721334241 +0200 +@@ -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 . + ; + + .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-07-25 20:36:06.721334241 +0200 +@@ -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 . + + Totally hacked up for uClibc by Erik Andersen + */ +@@ -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-07-25 20:36:06.729334283 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.729334283 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.729334283 +0200 +@@ -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 ++ * . + */ + #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-07-25 20:36:06.729334283 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.729334283 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.709334178 +0200 +@@ -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 ++ * . + */ + #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-07-25 20:36:06.757334429 +0200 +@@ -9,4 +9,14 @@ + + #include + #include ++ ++#if defined __NR_faccessat && !defined __NR_access ++# include ++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-07-25 20:36:06.757334429 +0200 +@@ -10,12 +10,10 @@ + #include + #include + +- + #ifdef __NR_alarm + _syscall1(unsigned int, alarm, unsigned int, seconds) + #else +-#include +- ++# include + + 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-07-25 20:36:06.757334429 +0200 +@@ -10,6 +10,6 @@ + #include + + #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-07-25 20:36:06.769334491 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.769334491 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _BYTESWAP_H && !defined _NETINET_IN_H + # error "Never use directly; include 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-07-25 20:36:06.769334491 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* NOTE: Because of the special way this file is used by , 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-07-25 20:36:06.769334491 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _UNISTD_H + # error "Never use directly; include 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-07-25 20:36:06.769334491 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _DIRENT_H + # error "Never use directly; include 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-07-25 20:36:06.769334491 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _DLFCN_H + # error "Never use directly; include 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-07-25 20:36:06.769334491 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _UNISTD_H + # error "Never include this file directly. Use 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-07-25 20:36:06.769334491 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifdef _ERRNO_H + +@@ -43,7 +42,6 @@ + # ifndef __ASSEMBLER__ + /* Function to get address of global `errno' variable. */ + extern int *__errno_location (void) __THROW __attribute__ ((__const__)); +-libc_hidden_proto(__errno_location) + + # ifdef __UCLIBC_HAS_THREADS__ + /* When using threads, errno is a per-thread value. */ +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-07-25 20:36:06.769334491 +0200 +@@ -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 ++ . */ ++ ++#ifndef _SYS_EVENTFD_H ++# error "Never use directly; include 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-07-25 20:36:06.769334491 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FENV_H + # error "Never use directly; include 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-07-25 20:36:06.769334491 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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 , but +- that does not exist if we are standalone. So: if __GNU_LIBRARY__ is +- not defined, include , which will pull in 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 +-#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-07-25 20:36:06.769334491 +0200 +@@ -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 ++ . */ + + #ifndef _MATH_H + # error "Never use directly; include 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-07-25 20:36:06.769334491 +0200 +@@ -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 ++ . */ + + #ifndef _MATH_H + # error "Never use directly; include 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-07-25 20:36:06.769334491 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _MATH_H + # error "Never use directly; include 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-07-25 20:36:06.769334491 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _MATH_H + # error "Never use directly; include 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-07-25 20:36:06.769334491 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:06.769334491 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + /* 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-07-25 20:36:06.769334491 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_IOCTL_H + # error "Never use directly; include 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-07-25 20:36:06.769334491 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_IOCTL_H + # error "Never use directly; include 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-07-25 20:36:06.769334491 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_IPC_H + # error "Never use directly; include 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-07-25 20:36:06.769334491 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.769334491 +0200 +@@ -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-07-25 20:36:06.769334491 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _LOCALE_H && !defined _LANGINFO_H + # error "Never use directly; include 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-07-25 20:36:06.769334491 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + /* 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-07-25 20:36:06.769334491 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* NOTE: Because of the special way this file is used by , 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-07-25 20:36:06.769334491 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _MATH_H && !defined _COMPLEX_H + # error "Never use directly; include 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-07-25 20:36:06.773334513 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_MMAN_H + # error "Never use directly; include 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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _MQUEUE_H + # error "Never use directly; include 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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_MSG_H + # error "Never use directly; include 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-07-25 20:36:06.773334513 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _MATH_H + # error "Never use directly; include 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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _NETDB_H + # error "Never include directly; use 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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_POLL_H + # error "Never use directly; include 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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * POSIX Standard: 2.9.2 Minimum Values Added to +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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * Never include this file directly; include 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-07-25 20:36:06.773334513 +0200 +@@ -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 . */ + +-#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-07-25 20:36:06.773334513 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_RESOURCE_H + # error "Never use directly; include 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-07-25 20:36:06.773334513 +0200 +@@ -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 ++ . */ + + #ifndef __need_schedparam + +@@ -109,6 +108,7 @@ + /* Size definition for CPU sets. */ + # define __CPU_SETSIZE 1024 + # define __NCPUBITS (8 * sizeof (__cpu_mask)) ++# include + + /* 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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SELECT_H + # error "Never use directly; include 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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SEM_H + # error "Never include directly; use 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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SHM_H + # error "Never include directly; use 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-07-25 20:36:06.773334513 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SIGNAL_H + # error "Never include directly; use 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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H + # error "Never use directly; include 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-07-25 20:36:06.773334513 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.773334513 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.773334513 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.773334513 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.773334513 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SIGNAL_H + # error "Never include this file directly. Use 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-07-25 20:36:06.773334513 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #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-07-25 20:36:06.773334513 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * Never include this file directly; use 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-07-25 20:36:06.773334513 +0200 +@@ -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 ++ . */ + + #ifndef __BITS_SOCKET_H + #define __BITS_SOCKET_H + +-#if !defined _SYS_SOCKET_H && !defined _NETINET_IN_H ++#ifndef _SYS_SOCKET_H + # error "Never include directly; use instead." + #endif + + #define __need_size_t +-#define __need_NULL + #include + + #include +@@ -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 + + /* 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-07-25 20:36:06.773334513 +0200 +@@ -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 ++ . */ ++ ++#ifndef _SYS_SOCKET_H ++# error "Never include directly; use 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-07-25 20:36:06.773334513 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STATFS_H + # error "Never include directly; use 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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STAT_H + # error "Never include directly; use 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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STATVFS_H + # error "Never include directly; use 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-07-25 20:36:06.773334513 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _STDIO_H + # error "Never include directly; use 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-07-25 20:36:06.773334513 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _STDIO_H && !defined __need_FOPEN_MAX && !defined __need_IOV_MAX + # error "Never include directly; use instead." +diff -Nur uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/syscalls-common.h uClibc-git/libc/sysdeps/linux/common/bits/syscalls-common.h +--- uClibc-0.9.33.2/libc/sysdeps/linux/common/bits/syscalls-common.h 2012-05-15 09:20:09.000000000 +0200 ++++ uClibc-git/libc/sysdeps/linux/common/bits/syscalls-common.h 2014-07-25 20:36:06.773334513 +0200 +@@ -39,13 +39,13 @@ + + /* Just like INLINE_SYSCALL(), but take a non-constant syscall (NCS) argument */ + #ifndef INLINE_SYSCALL_NCS +-# define INLINE_SYSCALL_NCS(name, nr, args...) \ ++# define INLINE_SYSCALL_NCS(num, nr, args...) \ + (__extension__ \ + ({ \ + INTERNAL_SYSCALL_DECL(__err); \ + (__extension__ \ + ({ \ +- long __res = INTERNAL_SYSCALL_NCS(name, __err, nr, args); \ ++ long __res = INTERNAL_SYSCALL_NCS(num, __err, nr, args); \ + if (unlikely(INTERNAL_SYSCALL_ERROR_P(__res, __err))) { \ + __set_errno(INTERNAL_SYSCALL_ERRNO(__res, __err)); \ + __res = -1L; \ +@@ -57,10 +57,10 @@ + ) + #endif + #ifndef INLINE_SYSCALL_NOERR_NCS +-# define INLINE_SYSCALL_NOERR_NCS(name, nr, args...) \ ++# define INLINE_SYSCALL_NOERR_NCS(num, nr, args...) \ + ({ \ + INTERNAL_SYSCALL_DECL(__err); \ +- long __res = INTERNAL_SYSCALL_NCS(name, __err, nr, args); \ ++ long __res = INTERNAL_SYSCALL_NCS(num, __err, nr, args); \ + __res; \ + }) + #endif +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-07-25 20:36:06.773334513 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _TERMIOS_H + # error "Never include directly; use 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-07-25 20:36:06.773334513 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * Never include this file directly; use 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-07-25 20:36:06.773334513 +0200 +@@ -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 ++ . */ + + /* + * Never include this file directly; use instead. +@@ -27,8 +26,6 @@ + #include + #include + +-#define __need_size_t +-#include + #ifdef _LIBC + #include + #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 +-#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-07-25 20:36:06.773334513 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _BITS_TYPES_H + # error "Never include directly; use 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-07-25 20:36:06.773334513 +0200 +@@ -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-07-25 20:36:06.773334513 +0200 +@@ -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 . + */ + + /* 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-07-25 20:36:06.773334513 +0200 +@@ -12,10 +12,6 @@ + #ifndef _UCLIBC_FPMAX_H + #define _UCLIBC_FPMAX_H + +-#ifndef _ISOC99_SOURCE +-#define _ISOC99_SOURCE 1 +-#endif +- + #include + #include + +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-07-25 20:36:06.773334513 +0200 +@@ -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 . + */ + + /* 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 + #include +@@ -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-07-25 20:36:06.773334513 +0200 +@@ -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-07-25 20:36:06.773334513 +0200 +@@ -13,7 +13,9 @@ + #ifdef __UCLIBC_HAS_THREADS__ + + #include ++#ifdef _LIBC + #include ++#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-07-25 20:36:06.773334513 +0200 +@@ -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 . + */ + + /* 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-07-25 20:36:06.773334513 +0200 +@@ -0,0 +1,136 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++/* ++ * Never include this file directly; use 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-07-25 20:36:06.773334513 +0200 +@@ -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 . + */ + + /* Supply prototypes for the internal thread functions used by the +@@ -27,15 +26,12 @@ + # error "Always include rather than " + #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-07-25 20:36:06.773334513 +0200 +@@ -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 + +@@ -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 ++# define __UCLIBC_IO_MUTEX(M) _IO_lock_t M ++# else ++# include ++# 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-07-25 20:36:06.777334534 +0200 +@@ -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 . + */ + + /* 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-07-25 20:36:06.777334534 +0200 +@@ -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 . + */ + + /* 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 + #include + #include +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-07-25 20:36:06.777334534 +0200 +@@ -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 . + */ + + /* 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-07-25 20:36:06.777334534 +0200 +@@ -13,9 +13,8 @@ + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public +- * License along with the GNU C Library; if not, 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 . + */ + + #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-07-25 20:36:06.777334534 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _SYS_UIO_H && !defined _FCNTL_H + # error "Never include directly; use 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-07-25 20:36:06.777334534 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_USTAT_H + # error "Never include directly; use 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-07-25 20:36:06.777334534 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _UTMP_H + # error "Never include directly; use 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-07-25 20:36:06.777334534 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _UTMPX_H + # error "Never include directly; use 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-07-25 20:36:06.777334534 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_UTSNAME_H + # error "Never include directly; use 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-07-25 20:36:06.777334534 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _SYS_WAIT_H && !defined _STDLIB_H + # error "Never include directly; use 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-07-25 20:36:06.777334534 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _SYS_WAIT_H && !defined _STDLIB_H + # error "Never include directly; use 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 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-07-25 20:36:06.777334534 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.777334534 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * Never include this file directly; use 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-07-25 20:36:06.777334534 +0200 +@@ -8,10 +8,8 @@ + #include + #include + +-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-07-25 20:36:06.777334534 +0200 +@@ -8,7 +8,8 @@ + */ + + #include +-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-07-25 20:36:06.777334534 +0200 +@@ -9,7 +9,7 @@ + + #include + +-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-07-25 20:36:06.777334534 +0200 +@@ -8,15 +8,7 @@ + */ + + #include +-#include + #include +-#include + +- +-#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-07-25 20:36:06.777334534 +0200 +@@ -9,13 +9,22 @@ + + #include + #include ++#include + ++#if defined __NR_fchmodat && !defined __NR_chmod ++# include ++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-07-25 20:36:06.777334534 +0200 +@@ -11,18 +11,26 @@ + #include + #include + ++#if defined __NR_fchownat && !defined __NR_chown ++# include ++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-07-25 20:36:06.777334534 +0200 +@@ -9,11 +9,11 @@ + + #include + #include +-#include + + #ifdef __NR_clock_getres + _syscall2(int, clock_getres, clockid_t, clock_id, struct timespec*, res) + #else ++# include + + 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-07-25 20:36:06.777334534 +0200 +@@ -10,11 +10,11 @@ + + #include + #include +-#include + + #ifdef __NR_clock_gettime + _syscall2(int, clock_gettime, clockid_t, clock_id, struct timespec*, tp) + #else ++# include + + 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-07-25 20:36:06.777334534 +0200 +@@ -9,11 +9,11 @@ + + #include + #include +-#include + + #ifdef __NR_clock_settime + _syscall2(int, clock_settime, clockid_t, clock_id, const struct timespec*, tp) + #else ++# include + + 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-07-25 20:36:06.777334534 +0200 +@@ -9,12 +9,13 @@ + + #include + #include ++#include + +-_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-07-25 20:36:06.777334534 +0200 +@@ -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 ++ . */ + +-#define __FORCE_GLIBC + #include ++#include + /* Prevent math.h from defining a colliding inline */ + #undef __USE_EXTERN_INLINES + #include +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-07-25 20:36:06.777334534 +0200 +@@ -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 ++ . */ + + #include <_lfs_64.h> +- +-#ifdef __UCLIBC_HAS_LFS__ + #include +-#include ++#include + + /* 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-07-25 20:36:06.777334534 +0200 +@@ -8,8 +8,11 @@ + */ + + #include ++#include + + 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-07-25 20:36:06.777334534 +0200 +@@ -7,10 +7,10 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +-#include + #include +-#include ++#define __need_size_t ++#include ++#include + #include + + #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-07-25 20:36:06.777334534 +0200 +@@ -7,7 +7,7 @@ + */ + + #include +-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-07-25 20:36:06.777334534 +0200 +@@ -17,10 +17,11 @@ + # endif + + # include +-# include + + # ifdef IS_IN_libc +-#include ++# include ++# include ++# include + # 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-07-25 20:36:06.777334534 +0200 +@@ -9,7 +9,24 @@ + + #include + #include ++#if defined __NR_dup3 && !defined __NR_dup2 ++# include ++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-07-25 20:36:06.777334534 +0200 +@@ -0,0 +1,16 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * dup3() for uClibc ++ * ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include ++#include ++ ++#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-07-25 20:36:06.777334534 +0200 +@@ -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 + * +@@ -9,75 +9,61 @@ + + #include + #include +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-# include +-#else +-# define SINGLE_THREAD_P 1 +-#endif ++#include + +-/* +- * 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 + +-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 ++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-07-25 20:36:06.777334534 +0200 +@@ -7,12 +7,24 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + ++#include + #include + #include + + /* + * 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-07-25 20:36:06.757334429 +0200 +@@ -7,28 +7,36 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +-#include + #include +-#include ++#include + #include +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include ++#include ++ ++#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-07-25 20:36:06.777334534 +0200 +@@ -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-07-25 20:36:06.777334534 +0200 +@@ -10,6 +10,7 @@ + #include + #include + +- ++#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-07-25 20:36:06.777334534 +0200 +@@ -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-07-25 20:36:06.777334534 +0200 +@@ -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-07-25 20:36:06.777334534 +0200 +@@ -8,36 +8,17 @@ + */ + + #include +-#include + + #if !defined __NR_fdatasync && defined __NR_osf_fdatasync + # define __NR_fdatasync __NR_osf_fdatasync + #endif + + #ifdef __NR_fdatasync ++# include ++# include + +-# ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-# include +-# 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-07-25 20:36:06.777334534 +0200 +@@ -8,16 +8,35 @@ + */ + + #include +-#include + +-#ifdef __ARCH_USE_MMU__ +- +-#ifdef __NR_fork +-#define __NR___libc_fork __NR_fork ++#if defined __ARCH_USE_MMU__ ++# include + extern __typeof(fork) __libc_fork; +-_syscall0(pid_t, __libc_fork) +-weak_alias(__libc_fork,fork) ++# if defined __NR_fork ++# include ++# define __NR___libc_fork __NR_fork ++_syscall0(pid_t, fork) ++ ++# elif defined __NR_clone && !defined __NR_fork ++# include ++# include ++# include ++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-07-25 20:36:06.777334534 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.777334534 +0200 +@@ -7,20 +7,20 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + ++#include <_lfs_64.h> + #include + +-#if defined __UCLIBC_HAS_LFS__ && defined __NR_fstat64 +-#include +-#include +-#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 ++# include ++# 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-07-25 20:36:06.777334534 +0200 +@@ -6,20 +6,21 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + ++#include <_lfs_64.h> ++#include + #include +-#include +-#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 ++# 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-07-25 20:36:06.777334534 +0200 +@@ -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-07-25 20:36:06.777334534 +0200 +@@ -12,10 +12,28 @@ + #include + #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-07-25 20:36:06.777334534 +0200 +@@ -9,8 +9,9 @@ + + #include + #include ++#include + +-#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-07-25 20:36:06.777334534 +0200 +@@ -9,29 +9,9 @@ + + #include + #include ++#include + +-#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-07-25 20:36:06.777334534 +0200 +@@ -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 ++#include <_lfs_64.h> ++#include ++#include + +-#ifdef __UCLIBC_HAS_LFS__ ++#ifdef __NR_ftruncate64 ++# include + +-# include +-# include +-# include +-# include +-# include +-# include +- +- +-# 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 ++# include + + /* 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 + + 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-07-25 20:36:06.777334534 +0200 +@@ -10,6 +10,20 @@ + #include + #include + ++#if defined __NR_ftruncate64 && !defined __NR_ftruncate ++# include ++# include ++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-07-25 20:36:06.777334534 +0200 +@@ -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-07-25 20:36:06.777334534 +0200 +@@ -4,7 +4,11 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include ++#include <_lfs_64.h> ++#include ++ ++#ifdef __NR_getdents64 ++ + #include + #include + #include +@@ -13,17 +17,9 @@ + #include + #include + #include +-#include +-#include +-#include ++#include + #include + +-#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-07-25 20:36:06.777334534 +0200 +@@ -4,21 +4,17 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +-#include ++#include ++#include ++ ++#if !(defined __UCLIBC_HAS_LFS__ && defined __NR_getdents64 && __WORDSIZE == 64) ++ + #include +-#include +-#include + #include +-#include +-#include + #include +-#include + #include + #include +-#include + +-#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 ++# include ++# include ++# include ++# include ++# include + + 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 + +-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-07-25 20:36:06.777334534 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.777334534 +0200 +@@ -8,10 +8,7 @@ + */ + + #include +-#include + #include +-#include +- + + #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 ++# include ++# include ++# include ++ ++# 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-07-25 20:36:06.777334534 +0200 +@@ -9,8 +9,8 @@ + + #include + +-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-07-25 20:36:06.777334534 +0200 +@@ -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 ++ . */ + + #include + #include + #include + +-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-07-25 20:36:06.781334555 +0200 +@@ -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 ++ . */ + + #include <_lfs_64.h> +- +-#include +-#include + #include + + /* the regular getrlimit will work just fine for 64bit users */ ++#if __WORDSIZE == 32 + +-#if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 32 +- ++# include + + /* 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-07-25 20:36:06.777334534 +0200 +@@ -7,12 +7,9 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#define getrlimit64 __hide_getrlimit64 + #include +-#include + #include +-#undef getrlimit64 +- ++#include + + /* 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-07-25 20:36:06.781334555 +0200 +@@ -10,9 +10,5 @@ + #include + #include + +-#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-07-25 20:36:06.781334555 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.781334555 +0200 +@@ -8,12 +8,13 @@ + */ + + #include +-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-07-25 20:36:06.781334555 +0200 +@@ -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-07-25 20:36:06.781334555 +0200 +@@ -10,14 +10,7 @@ + #include + #include + #include +- +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include +-#else +-#define SINGLE_THREAD_P 1 +-#endif +- +-libc_hidden_proto(ioctl) ++#include + + #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-07-25 20:36:06.781334555 +0200 +@@ -13,10 +13,6 @@ + + /* psm: can't #include , 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-07-25 20:36:06.781334555 +0200 +@@ -0,0 +1,6 @@ ++/* Private macros for accessing __jmp_buf contents. dummy version. */ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * 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-07-25 20:36:06.781334555 +0200 +@@ -11,17 +11,26 @@ + #include + #include + +-#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 ++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-07-25 20:36:06.781334555 +0200 +@@ -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-07-25 20:36:06.781334555 +0200 +@@ -9,4 +9,13 @@ + + #include + #include ++ ++#if defined __NR_linkat && !defined __NR_link ++# include ++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-07-25 20:36:06.781334555 +0200 +@@ -7,36 +7,26 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +-#include ++#include <_lfs_64.h> + #include ++#include + + /* 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 ++# include ++# include ++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-07-25 20:36:06.781334555 +0200 +@@ -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 ++ . */ + + #include + #include + #include + +- +-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-07-25 20:36:06.781334555 +0200 +@@ -9,19 +9,55 @@ + + #include + #include ++#include + + #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 ++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 ++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-07-25 20:36:06.781334555 +0200 +@@ -7,17 +7,27 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + ++#include <_lfs_64.h> + #include + +-#if defined __UCLIBC_HAS_LFS__ && defined __NR_lstat64 + # include + # include +-# include "xstatconv.h" + ++#if defined __NR_fstatat64 && !defined __NR_lstat64 ++# include ++ ++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-07-25 20:36:06.781334555 +0200 +@@ -10,12 +10,23 @@ + #include + #include + #include +-#include "xstatconv.h" ++ ++#if defined __NR_fstatat64 && !defined __NR_lstat ++# include + + 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-07-25 20:36:06.757334429 +0200 +@@ -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-07-25 20:36:06.781334555 +0200 +@@ -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-07-25 20:36:06.781334555 +0200 +@@ -10,8 +10,15 @@ + #include + #include + ++#if defined __NR_mkdirat && !defined __NR_mkdir ++# include ++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-07-25 20:36:06.781334555 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.781334555 +0200 +@@ -10,6 +10,13 @@ + #include + #include + ++#if defined __NR_mknodat && !defined __NR_mknod ++# include ++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-07-25 20:36:06.781334555 +0200 +@@ -6,18 +6,12 @@ + /* Massivly hacked up for uClibc by Erik Andersen */ + + #include <_lfs_64.h> +- +-#ifdef __UCLIBC_HAS_LFS__ +- +-#include + #include +-#include +-#include + #include +-#include +- ++#include ++#include + +-# 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 + +-/* 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-07-25 20:36:06.781334555 +0200 +@@ -7,25 +7,57 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +-#include + #include +-#include ++#include + +-#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 ++# include ++# 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-07-25 20:36:06.781334555 +0200 +@@ -10,5 +10,5 @@ + #include + #include + _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-07-25 20:36:06.781334555 +0200 +@@ -8,38 +8,14 @@ + */ + + #include +-#include +-#include + +-#ifdef __NR_msync ++#if defined __NR_msync && defined __ARCH_USE_MMU__ ++# include ++# include + +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include +-#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-07-25 20:36:06.781334555 +0200 +@@ -8,9 +8,7 @@ + */ + + #include +-#include + #include + +- + _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-07-25 20:36:06.781334555 +0200 +@@ -9,32 +9,13 @@ + + #include + #include ++#include + +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include +-#include +-#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-07-25 20:36:06.781334555 +0200 +@@ -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-07-25 20:36:06.781334555 +0200 +@@ -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 ++ License along with the GNU C Library; if not, see ++ . */ + + 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-07-25 20:36:06.781334555 +0200 +@@ -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 , 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 ++ . */ + ++#include + #include + ++#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 ++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 ++#include ++#include ++ ++#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-07-25 20:36:06.781334555 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.781334555 +0200 +@@ -4,54 +4,31 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include ++#include <_lfs_64.h> ++#include + #include + #include +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include +-#include +-#endif +- +-#ifdef __UCLIBC_HAS_LFS__ +- +-#ifndef O_LARGEFILE +-# define O_LARGEFILE 0100000 +-#endif ++#include + + /* 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-07-25 20:36:06.781334555 +0200 +@@ -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 + #include +-#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-07-25 20:36:06.781334555 +0200 +@@ -6,19 +6,13 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#define openat __xx_openat + #include + #include +-#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-07-25 20:36:06.781334555 +0200 +@@ -8,15 +8,22 @@ + */ + + #include +-#include +-#include + #include +-#include +-#include ++#include ++#include ++ ++#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-07-25 20:36:06.781334555 +0200 +@@ -7,35 +7,35 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#define __UCLIBC_HIDE_DEPRECATED__ + #include + #include ++#include + +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include +-#endif +- +-#include ++#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 ++# include + +-/* 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-07-25 20:36:06.781334555 +0200 +@@ -11,5 +11,13 @@ + #include + + ++#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-07-25 20:36:06.781334555 +0200 +@@ -9,7 +9,7 @@ + + #include + +-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-07-25 20:36:06.781334555 +0200 +@@ -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 ++ . */ + + #include + #include + #include +- +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include +-#else +-#define SINGLE_THREAD_P 1 +-#endif +- +-libc_hidden_proto(poll) ++#include + + #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 +@@ -56,9 +36,7 @@ + #include + #include + #include +- +-libc_hidden_proto(getdtablesize) +-libc_hidden_proto(select) ++#include + + /* 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-07-25 20:36:06.781334555 +0200 +@@ -8,63 +8,32 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +-#include +-#include +-#include +-#include +-#include ++#include <_lfs_64.h> + #include +-#include ++#include + +-#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 ++# include + +-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-07-25 20:36:06.781334555 +0200 +@@ -9,27 +9,46 @@ + */ + + #include +-#include + +-#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 ++# include ++# include ++ ++# 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-07-25 20:36:06.781334555 +0200 +@@ -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 ++ * ++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include ++#include ++#include ++#include ++ ++#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-07-25 20:36:06.781334555 +0200 +@@ -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 ++ * ++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include ++#include ++#include ++#include ++ ++#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-07-25 20:36:06.781334555 +0200 +@@ -0,0 +1,25 @@ ++/* vi: set sw=4 ts=4: */ ++/* Licensed under the LGPL v2.1, see the file LICENSE in this tarball. */ ++ ++#include ++#include ++ ++#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-07-25 20:36:06.781334555 +0200 +@@ -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 ++ . */ + +-#include + #include +-#include ++ ++#if defined __NR_ppoll && defined __UCLIBC_LINUX_SPECIFIC__ && defined __USE_GNU ++ + #define __need_NULL + #include ++#include ++#include ++#include + +-#if defined __NR_ppoll && defined __UCLIBC_LINUX_SPECIFIC__ +-# ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-# include +-# 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-07-25 20:36:06.781334555 +0200 +@@ -8,10 +8,10 @@ + */ + + #include +-#include + /* 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-07-25 20:36:06.781334555 +0200 +@@ -15,173 +15,101 @@ + + #include + #include +-#include + #include ++#include ++#include + +-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 +- +-#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-07-25 20:36:06.781334555 +0200 +@@ -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 ++ . */ + +-#include +-#include +-#include /* For NULL. */ +-#include +-#include +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include +-#endif ++#include + +-libc_hidden_proto(sigprocmask) +-libc_hidden_proto(select) ++#ifdef __USE_XOPEN2K + ++#include ++#include ++#include ++#include ++#include + +-/* 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-07-25 20:36:06.781334555 +0200 +@@ -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 +-#include +-#include +-#include +-#include +- +-#ifdef __UCLIBC_HAS_LFS__ ++ License along with the GNU C Library; if not, see ++ . */ + +-#include <_lfs_64.h> ++#include + +-#ifdef __NR_readahead ++#if defined __NR_readahead && defined __UCLIBC_HAS_LFS__ && defined __USE_GNU + +-# define __NR___readahead __NR_readahead ++# include ++# include + + # 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-07-25 20:36:06.781334555 +0200 +@@ -9,11 +9,11 @@ + + #include + #include ++#include + +-_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-07-25 20:36:06.781334555 +0200 +@@ -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-07-25 20:36:06.781334555 +0200 +@@ -10,5 +10,13 @@ + #include + #include + ++#if defined(__NR_readlinkat) && !defined(__NR_readlink) ++# include ++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-07-25 20:36:06.781334555 +0200 +@@ -10,41 +10,21 @@ + + #include + #include +- +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include ++#include + + /* 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-07-25 20:36:06.781334555 +0200 +@@ -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-07-25 20:36:06.781334555 +0200 +@@ -8,17 +8,15 @@ + */ + + #include +-#include +-#include +-#include + #include ++#include + +-#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 ++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-07-25 20:36:06.781334555 +0200 +@@ -11,5 +11,13 @@ + #include + + ++#if defined __NR_unlinkat && !defined __NR_rmdir ++# include ++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-07-25 20:36:06.757334429 +0200 +@@ -9,42 +9,49 @@ + */ + + #include +-#include +-#include + + #ifdef __NR_rt_sigtimedwait +- ++# include ++# include + # ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-# include + # include /* SIGCANCEL */ ++# endif ++# ifdef SIGCANCEL ++# define __need_NULL ++# include ++# include ++# 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 +-# 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-07-25 20:36:06.757334429 +0200 +@@ -9,81 +9,17 @@ + */ + + #include +-#include +-#include + + #ifdef __NR_rt_sigtimedwait ++# define __need_NULL ++# include ++# include ++# include + +-# ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-# include +- +-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 +-# 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-07-25 20:36:06.781334555 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:06.785334575 +0200 +@@ -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 ++ . */ + +-#include +-#ifdef __USE_GNU +- +-#include +-#include + #include + +-#include +-#include +- +-#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 ++# include ++# include ++# include ++# 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-07-25 20:36:06.785334575 +0200 +@@ -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 ++ . */ + +-#include +-#ifdef __USE_GNU +- +-#include +-#include + #include +-#include +-#include +-#include +-#include +- +-#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 ++# include ++# include ++# include ++# include ++# 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-07-25 20:36:06.785334575 +0200 +@@ -9,27 +9,24 @@ + + #include + #include +-#include ++#include + +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include +-#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 ++# 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-07-25 20:36:06.785334575 +0200 +@@ -10,15 +10,12 @@ + * just the macro we need to order things, __LONG_LONG_PAIR. + */ + +-#include +-#include +-#include +-#include +-#include +-#include ++#include <_lfs_64.h> + #include + #include + +-#if defined __UCLIBC_HAS_LFS__ && defined __NR_sendfile64 ++#if defined __NR_sendfile64 && __WORDSIZE != 64 ++# include + _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-07-25 20:36:06.785334575 +0200 +@@ -8,16 +8,57 @@ + */ + + #include +-#include +-#include + +-#ifdef __NR_sendfile ++# include ++# include + ++#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 ++# include ++ ++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-07-25 20:36:06.785334575 +0200 +@@ -8,12 +8,9 @@ + */ + + #include +-#include +-#include +-#include + + #ifdef __USE_BSD +- ++#include + + #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 ++# include ++# include ++# include ++ ++# 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-07-25 20:36:06.785334575 +0200 +@@ -4,10 +4,8 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include + #include + +- + 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-07-25 20:36:06.785334575 +0200 +@@ -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 ++ . */ + + #include <_lfs_64.h> +- +-#include +-#include + #include + + /* the regular setrlimit will work just fine for 64bit users */ ++#if __WORDSIZE == 32 + +-#if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 32 +- ++# include + + /* 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-07-25 20:36:06.785334575 +0200 +@@ -7,12 +7,9 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#define setrlimit64 __hide_setrlimit64 + #include +-#include + #include +-#undef setrlimit64 +- ++#include + + /* 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 ++# include ++# include ++ + /* 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-07-25 20:36:06.785334575 +0200 +@@ -10,6 +10,5 @@ + #include + #include + +- + _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-07-25 20:36:06.785334575 +0200 +@@ -8,12 +8,36 @@ + */ + + #include +-#include + + #ifdef __USE_BSD ++# include ++# 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 ++# include ++# include ++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-07-25 20:36:06.785334575 +0200 +@@ -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-07-25 20:36:06.785334575 +0200 +@@ -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-07-25 20:36:06.785334575 +0200 +@@ -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-07-25 20:36:06.785334575 +0200 +@@ -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-07-25 20:36:06.785334575 +0200 +@@ -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 +-#include +-#include +-#include ++ License along with the GNU C Library; if not, see ++ . */ + + #include +-#if defined __USE_POSIX199309 + ++#if defined __NR_rt_sigqueueinfo && defined __USE_POSIX199309 ++# include ++# include ++# include + +-#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-07-25 20:36:06.785334575 +0200 +@@ -9,51 +9,18 @@ + + #include + +-#if defined __USE_POSIX ++#ifdef __USE_POSIX + #include +-#undef sigsuspend ++#include + +-libc_hidden_proto(sigsuspend) +- +-#ifdef __NR_rt_sigsuspend +-# define __NR___rt_sigsuspend __NR_rt_sigsuspend +- +-# ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-# include +-# include +- +-/* 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-07-25 20:36:06.757334429 +0200 +@@ -8,8 +8,18 @@ + */ + + #include ++ ++/* 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 ++ + #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-07-25 20:36:06.785334575 +0200 +@@ -8,9 +8,10 @@ + */ + + #include +-#include + +-#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 ++ ++_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-07-25 20:36:06.785334575 +0200 +@@ -20,103 +20,113 @@ + #error "file must not be compiled with stack protection enabled on it. Use -fno-stack-protector" + #endif + ++#include ++#include ++#include ++#ifdef __UCLIBC_HAS_SYSLOG__ ++#include ++#endif ++ + #ifdef __PROPOLICE_BLOCK_SEGV__ + # define SSP_SIGTYPE SIGSEGV + #else + # define SSP_SIGTYPE SIGABRT + #endif + +-#include +-#include +-#include +-#if defined __UCLIBC_HAS_SYSLOG__ +-#include ++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-07-25 20:36:06.785334575 +0200 +@@ -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 ++ . */ + + /* + * Peter S. Mazinger ps.m[@]gmx.net + * copied stack_chk_fail_local.c from glibc and adapted for uClibc + */ + +-#include ++#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 + + /* 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-07-25 20:36:06.785334575 +0200 +@@ -7,17 +7,28 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + ++#include <_lfs_64.h> + #include + #include + +-#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 + # include +-# 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-07-25 20:36:06.785334575 +0200 +@@ -10,14 +10,24 @@ + #include + #include + #include +-#include "xstatconv.h" + + #undef stat + ++#if defined __NR_fstatat64 && !defined __NR_stat ++# include ++ ++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-07-25 20:36:06.785334575 +0200 +@@ -13,10 +13,39 @@ + #include + + 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-07-25 20:36:06.785334575 +0200 +@@ -8,15 +8,17 @@ + */ + + #include +-#include +-#include + + #ifdef __USE_SVID +-#ifdef __NR_stime ++# include ++# 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 ++# include ++# include ++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-07-25 20:36:06.785334575 +0200 +@@ -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 + #include + #include + + #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-07-25 20:36:06.785334575 +0200 +@@ -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-07-25 20:36:06.785334575 +0200 +@@ -9,6 +9,19 @@ + + #include + #if defined __USE_BSD || defined __USE_UNIX98 || defined __USE_XOPEN2K +-#include ++# include ++ ++# if defined __NR_symlinkat && !defined __NR_symlink ++# include ++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-07-25 20:36:06.785334575 +0200 +@@ -8,12 +8,8 @@ + */ + + #include +-# if defined __USE_BSD || defined __USE_UNIX98 +-#include +-#include + +-void sync(void) +-{ +- INLINE_SYSCALL(sync, 0); +-} ++#if defined __USE_BSD || defined __USE_UNIX98 ++# include ++_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-07-25 20:36:06.785334575 +0200 +@@ -4,24 +4,34 @@ + * + * Copyright (C) 2008 Bernhard Reutner-Fischer + * +- * 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 +-#if defined __USE_GNU +-#include ++#if defined __UCLIBC_HAS_LFS__ && defined __USE_GNU ++# include ++# include ++# include ++# include + +-#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-07-25 20:36:06.801334659 +0200 +@@ -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 ++ . */ + + #ifndef _SYS_ACCT_H + #define _SYS_ACCT_H 1 + + #include + ++#include + #define __need_time_t + #include + #include +@@ -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-07-25 20:36:06.801334659 +0200 +@@ -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-07-25 20:36:06.801334659 +0200 +@@ -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 ++ . */ + + #ifndef _SYS_EVENTFD_H + #define _SYS_EVENTFD_H 1 + + #include + ++/* Get the platform-dependent flags. */ ++#include + + /* 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-07-25 20:36:06.801334659 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.801334659 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:06.757334429 +0200 +@@ -7,14 +7,18 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + ++#include <_lfs_64.h> + #include +-#include +-#include ++#include + +-#if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 ++#if defined __NR_fcntl64 && __WORDSIZE == 32 ++# include ++# include ++# include ++ ++# 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-07-25 20:36:06.757334429 +0200 +@@ -10,82 +10,61 @@ + + #include + #include +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include /* Must come before . */ +-#endif ++#include /* Must come before . */ + #include + #include + +-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-07-25 20:36:06.757334429 +0200 +@@ -12,11 +12,8 @@ + #ifdef __NR_rt_sigaction + #include + +-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 +- * +- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +- */ +- +-#define _LARGEFILE64_SOURCE +-#include +-#include +-#include +-#include +-#include +- +-#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 +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-07-25 20:36:06.757334429 +0200 +@@ -12,8 +12,7 @@ + #ifndef __NR_rt_sigaction + #define __NR___syscall_sigaction __NR_sigaction + #include +-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-07-25 20:36:06.801334659 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -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-07-25 20:36:06.801334659 +0200 +@@ -8,5 +8,8 @@ + */ + + #include +-#include ++ ++#ifdef __NR_sysinfo ++# include + _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-07-25 20:36:06.801334659 +0200 +@@ -8,9 +8,10 @@ + */ + + #include +-#include + +-#ifdef __NR_tee ++#if defined __NR_tee && defined __USE_GNU ++# include ++ + _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-07-25 20:36:06.801334659 +0200 +@@ -9,12 +9,11 @@ + + #include + #include +-#include +- + + #ifdef __NR_time + _syscall_noerr1(time_t, time, time_t *, t) + #else ++# include + 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-07-25 20:36:06.801334659 +0200 +@@ -10,6 +10,5 @@ + #include + #include + +- + _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-07-25 20:36:06.801334659 +0200 +@@ -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 +-#include +-#include +-#include +-#include +-#include ++#include <_lfs_64.h> + #include ++#include + +-#if defined __UCLIBC_HAS_LFS__ +- +-#if defined __NR_truncate64 +- +-#if __WORDSIZE == 64 ++#ifdef __NR_truncate64 ++# include + +-/* 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 ++# include + 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 + 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-07-25 20:36:06.801334659 +0200 +@@ -10,6 +10,25 @@ + #include + #include + ++#if defined(__NR_truncate64) && !defined(__NR_truncate) ++# include ++# include + ++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-07-25 20:36:06.801334659 +0200 +@@ -10,10 +10,4 @@ + #include + #include + +-#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-07-25 20:36:06.801334659 +0200 +@@ -9,9 +9,8 @@ + + #include + +-#if defined __USE_GNU +-#include +-#ifdef __NR_umount2 /* Old kernels don't have umount2 */ ++#if defined __UCLIBC_LINUX_SPECIFIC__ && defined __NR_umount2 ++# include + _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-07-25 20:36:06.801334659 +0200 +@@ -9,24 +9,15 @@ + + #include + +-#if defined __USE_GNU + #include +- +-/* 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-07-25 20:36:06.801334659 +0200 +@@ -10,6 +10,5 @@ + #include + #include + +- + _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-07-25 20:36:06.801334659 +0200 +@@ -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-07-25 20:36:06.801334659 +0200 +@@ -10,6 +10,13 @@ + #include + #include + +- ++#if defined __NR_unlinkat && !defined __NR_unlink ++# include ++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-07-25 20:36:06.801334659 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.801334659 +0200 +@@ -11,16 +11,18 @@ + #include + #include + +-#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-07-25 20:36:06.801334659 +0200 +@@ -10,13 +10,33 @@ + #include + #include + ++#if defined __NR_utimensat && !defined __NR_utime ++# include ++# include + +-#ifdef __NR_utime +-_syscall2(int, utime, const char *, file, const struct utimbuf *, times) +-#else +-#include +-#include ++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 ++# include + + 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-07-25 20:36:06.801334659 +0200 +@@ -8,15 +8,33 @@ + */ + + #include +-#include + #include + ++#if defined __NR_utimensat && !defined __NR_utimes ++# include ++# include ++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 ++ 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 ++# include + + 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-07-25 20:36:06.801334659 +0200 +@@ -4,30 +4,37 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +-#include + #include + ++#if (defined __NR_vfork || defined __NR_clone || (defined __ARCH_USE_MMU__ && defined __NR_fork)) && (defined __USE_BSD || defined __USE_XOPEN_EXTENDED) ++# include + extern __typeof(vfork) __vfork attribute_hidden; + +-#ifdef __NR_vfork ++# if defined __NR_clone && !defined __NR_vfork ++# include ++# include + +-# 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-07-25 20:36:06.801334659 +0200 +@@ -8,9 +8,10 @@ + */ + + #include +-#include + +-#ifdef __NR_vmsplice ++#if defined __NR_vmsplice && defined __USE_GNU ++# include ++ + _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-07-25 20:36:06.801334659 +0200 +@@ -5,20 +5,12 @@ + */ + + #include +-#include +-#include +-#include + +-#if defined __USE_BSD ++#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED ++# include + +- +-/* 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-07-25 20:36:06.801334659 +0200 +@@ -8,18 +8,16 @@ + */ + + #include +-#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED + #include +-#include + ++# 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-07-25 20:36:06.801334659 +0200 +@@ -4,41 +4,11 @@ + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ +-#include +-#include +-#include + #include +-#include ++#include + +-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 +-#include +- +-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-07-25 20:36:06.801334659 +0200 +@@ -8,43 +8,19 @@ + #include + + #if defined __USE_SVID || defined __USE_XOPEN +-# include +-# include +-# include +-# include +- +-# ifdef __NR_waitid +- +-# ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-# include +-# 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 ++#include ++#include ++#ifndef __NR_waitid ++# include ++#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-07-25 20:36:06.801334659 +0200 +@@ -6,32 +6,16 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +-#include + #include +-#include ++#include + +-#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-07-25 20:36:06.801334659 +0200 +@@ -9,17 +9,11 @@ + + #include + #include ++#include + +-_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-07-25 20:36:06.801334659 +0200 +@@ -9,42 +9,20 @@ + + #include + #include +- +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include +-#include ++#include + + /* 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-07-25 20:36:06.801334659 +0200 +@@ -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 ++ . + + Modified for uClibc by Erik Andersen + */ + +-#include + #include + #include + #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-07-25 20:36:06.801334659 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. ++ License along with the GNU C Library; if not, see ++ . + + Modified for uClibc by Erik Andersen + */ +@@ -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 + #include + ++#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-07-25 20:36:06.745334366 +0200 +@@ -0,0 +1,17 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * 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-07-25 20:36:06.745334366 +0200 +@@ -0,0 +1,53 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++#ifndef _DIRENT_H ++# error "Never use directly; include instead." ++#endif ++ ++#include ++#include ++ ++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-07-25 20:36:06.745334366 +0200 +@@ -0,0 +1,28 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * 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 ++ ++/* ++ * 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-07-25 20:36:06.745334366 +0200 +@@ -0,0 +1,78 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++#ifndef _SYS_STATFS_H ++# error "Never include directly; use instead." ++#endif ++ ++#include ++#include ++#include ++ ++ ++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-07-25 20:36:06.745334366 +0200 +@@ -0,0 +1,195 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++#ifndef _SYS_STAT_H ++# error "Never include directly; use instead." ++#endif ++ ++#include ++#include ++ ++/* 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 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 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-07-25 20:36:06.833334827 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:06.833334827 +0200 +@@ -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-07-25 20:36:06.833334827 +0200 +@@ -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 ++ . */ + +-/* 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 directly; use 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-07-25 20:36:06.833334827 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.833334827 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _TERMIOS_H + # error "Never include directly; use 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-07-25 20:36:06.833334827 +0200 +@@ -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-07-25 20:36:06.833334827 +0200 +@@ -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 ++ * . + */ + + /* 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-07-25 20:36:06.833334827 +0200 +@@ -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 . */ + + #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-07-25 20:36:06.833334827 +0200 +@@ -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 . */ + + #include + #include +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 +- * +- * 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-07-25 20:36:06.833334827 +0200 +@@ -0,0 +1,8 @@ ++/* Private macros for accessing __jmp_buf contents. BFIN version. */ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * 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-07-25 20:36:06.833334827 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++#include ++ ++/* 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-07-25 20:36:06.813334722 +0200 +@@ -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 . */ + +-#include + #include "sysdep.h" +-#define _SETJMP_H +-#define _ASM +-#include + + .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-07-25 20:36:06.813334722 +0200 +@@ -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-07-25 20:36:06.833334827 +0200 +@@ -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 . */ + + #include "sysdep.h" +-#define _SETJMP_H +-#define _ASM +-#include + + .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-07-25 20:36:06.841334869 +0200 +@@ -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 . */ + + #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-07-25 20:36:06.841334869 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.841334869 +0200 +@@ -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 . */ + + #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-07-25 20:36:06.841334869 +0200 +@@ -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 . */ + + #ifndef _SYSDEP_H_ + #define _SYSDEP_H_ + +-#include ++#include + + #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-07-25 20:36:06.841334869 +0200 +@@ -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 . */ + + #include + #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-07-25 20:36:06.841334869 +0200 +@@ -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-07-25 20:36:06.865334995 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:06.865334995 +0200 +@@ -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 ++ . */ + + #ifndef _FENV_H + # error "Never use directly; include 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-07-25 20:36:06.865334995 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:06.865334995 +0200 +@@ -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-07-25 20:36:06.865334995 +0200 +@@ -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-07-25 20:36:06.865334995 +0200 +@@ -378,13 +378,6 @@ + return (type)(par1); \ + } + +-#include +-/* Taken from */ +-#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-07-25 20:36:06.865334995 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:06.865334995 +0200 +@@ -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 ++ * . + */ + + /* 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-07-25 20:36:06.853334932 +0200 +@@ -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-07-25 20:36:06.877335057 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.877335057 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.877335057 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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 +- * +- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +- */ +- +-#include +-#include +-#include +- +-#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-07-25 20:36:06.905335205 +0200 +@@ -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 . */ + + #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-07-25 20:36:06.905335205 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:06.905335205 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.905335205 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.905335205 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STAT_H + # error "Never include directly; use 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-07-25 20:36:06.905335205 +0200 +@@ -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-07-25 20:36:06.905335205 +0200 +@@ -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-07-25 20:36:06.905335205 +0200 +@@ -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 ++ * . + */ + + /* 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-07-25 20:36:06.905335205 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:06.905335205 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.905335205 +0200 +@@ -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 . */ + + + /* 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-07-25 20:36:06.905335205 +0200 +@@ -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 . */ + + .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-07-25 20:36:06.905335205 +0200 +@@ -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 . */ + + .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-07-25 20:36:06.905335205 +0200 +@@ -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 . */ + + #include + #include +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-07-25 20:36:06.905335205 +0200 +@@ -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 . */ + + #include + +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-07-25 20:36:06.909335225 +0200 +@@ -9,11 +9,9 @@ + * Adapted to FR-V by Alexandre Oliva + */ + ++#include <_lfs_64.h> + #include +-#include + #include + +-#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-07-25 20:36:06.909335225 +0200 +@@ -0,0 +1,14 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include ++ ++/* 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-07-25 20:36:06.889335121 +0200 +@@ -4,10 +4,6 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#define _SETJMP_H +-#define _ASM +-#include +- + # 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-07-25 20:36:06.909335225 +0200 +@@ -9,11 +9,9 @@ + * Adapted to FR-V by Alexandre Oliva + */ + ++#include <_lfs_64.h> + #include +-#include + #include + +-#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-07-25 20:36:06.889335121 +0200 +@@ -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 , 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 +- +- We don't want to use the old mmap interface. */ +- +-#include +-#include +-#include +-#include +-#include +- +- +-#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-07-25 20:36:06.909335225 +0200 +@@ -9,11 +9,9 @@ + * Adapted to FR-V by Alexandre Oliva + */ + ++#include <_lfs_64.h> + #include +-#include + #include + +-#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-07-25 20:36:06.921335288 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.921335288 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.925335309 +0200 +@@ -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 . */ + + #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-07-25 20:36:06.925335309 +0200 +@@ -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 ++ * . + */ + + #include +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-07-25 20:36:06.925335309 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:06.925335309 +0200 +@@ -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 +- +-#include +-#define _ERRNO_H 1 +-#include ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include + + .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-07-25 20:36:06.961335497 +0200 +@@ -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 . */ + + #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-07-25 20:36:06.969335539 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:06.969335539 +0200 +@@ -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-07-25 20:36:06.969335539 +0200 +@@ -9,24 +9,10 @@ + # error "Never include directly; use 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-07-25 20:36:06.969335539 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.969335539 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.969335539 +0200 +@@ -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-07-25 20:36:06.969335539 +0200 +@@ -1,8 +1,6 @@ + /* BSD `_setjmp' entry point to `sigsetjmp (..., 1)'. H8/300 version. */ + +-#define _ASM +-#define _SETJMP_H +-#include ++#include + + #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-07-25 20:36:06.969335539 +0200 +@@ -1,8 +1,6 @@ + /* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. H8/300 version. */ + +-#define _ASM +-#define _SETJMP_H +-#include ++#include + + #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-07-25 20:36:06.969335539 +0200 +@@ -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 . */ + + #include + +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-07-25 20:36:06.969335539 +0200 +@@ -0,0 +1,9 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * 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-07-25 20:36:06.969335539 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include ++ ++/* 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-07-25 20:36:06.937335372 +0200 +@@ -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-07-25 20:36:06.969335539 +0200 +@@ -1,6 +1,4 @@ +-#define _ASM +-#define _SETJMP_H +-#include ++#include + + #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-07-25 20:36:06.981335603 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:06.981335603 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:06.981335603 +0200 +@@ -1,5 +1,5 @@ + +-#include ++#include + + #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-07-25 20:36:06.989335644 +0200 +@@ -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 ++;! . + + + ;! 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-07-25 20:36:07.001335707 +0200 +@@ -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 ++ . */ + + #include ++#include + #include + + #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-07-25 20:36:07.001335707 +0200 +@@ -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 ++ . */ ++ ++#ifndef _SYS_EVENTFD_H ++# error "Never use directly; include 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-07-25 20:36:07.001335707 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.001335707 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FENV_H + # error "Never use directly; include 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-07-25 20:36:07.001335707 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_IPC_H + # error "Never use directly; include 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-07-25 20:36:07.001335707 +0200 +@@ -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-07-25 20:36:07.001335707 +0200 +@@ -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-07-25 20:36:07.001335707 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_MMAN_H + # error "Never use directly; include 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-07-25 20:36:07.001335707 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:07.001335707 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SIGNAL_H + # error "Never include directly; use 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-07-25 20:36:07.001335707 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.001335707 +0200 +@@ -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 ++ . */ ++ ++#ifndef _SYS_SOCKET_H ++# error "Never include directly; use 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-07-25 20:36:07.001335707 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.001335707 +0200 +@@ -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-07-25 20:36:07.001335707 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.001335707 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.001335707 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.001335707 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.001335707 +0200 +@@ -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 ++ . */ + + .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-07-25 20:36:07.001335707 +0200 +@@ -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 ++ . */ ++ ++#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-07-25 20:36:07.001335707 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++#include ++ ++/* 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-07-25 20:36:06.989335644 +0200 +@@ -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 +-#define _SETJMP_H +-#define _ASM +-#include ++ License along with the GNU C Library; if not, see ++ . */ + + /* __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-07-25 20:36:07.001335707 +0200 +@@ -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 ++;! . + + + ;! 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-07-25 20:36:06.989335644 +0200 +@@ -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 +- * Copyright (C) 2005 by Mike Frysinger +- * +- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +- */ +- +-#include +-#include +-#include +-#include +- +- +-_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-07-25 20:36:07.001335707 +0200 +@@ -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 ++;! . + + + ;! 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-07-25 20:36:07.001335707 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + .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-07-25 20:36:07.001335707 +0200 +@@ -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 ++;! . + + + ;! 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-07-25 20:36:07.021335811 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.021335811 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.021335811 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.021335811 +0200 +@@ -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 ++;! . + + + ;! 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-07-25 20:36:07.049335958 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.049335958 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.049335958 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.049335958 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FENV_H + # error "Never use directly; include 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-07-25 20:36:07.049335958 +0200 +@@ -0,0 +1,42 @@ ++/* `HUGE_VALL' constant for ix86 (where it is infinity). ++ Used by and 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 ++ . */ ++ ++#ifndef _MATH_H ++# error "Never use directly; include 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-07-25 20:36:07.049335958 +0200 +@@ -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-07-25 20:36:07.049335958 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _MATH_H && !defined _COMPLEX_H + # error "Never use directly; include 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-07-25 20:36:07.049335958 +0200 +@@ -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 ++ . */ + + #ifndef _MATH_H + # error "Never use directly; include 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-07-25 20:36:07.049335958 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SELECT_H + # error "Never use directly; include 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-07-25 20:36:07.049335958 +0200 +@@ -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 ++ . */ + + /* Define the machine-dependent type `jmp_buf'. Intel 386 version. */ + #ifndef _BITS_SETJMP_H +@@ -24,23 +24,6 @@ + # error "Never include directly; use 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-07-25 20:36:07.049335958 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.049335958 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.049335958 +0200 +@@ -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-07-25 20:36:07.049335958 +0200 +@@ -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-07-25 20:36:07.049335958 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.049335958 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.049335958 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.053335979 +0200 +@@ -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 ++ License along with the GNU C Library; if not, see ++ . */ + + .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-07-25 20:36:07.053335979 +0200 +@@ -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 ++ . */ + + /* 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 ++#include + + .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-07-25 20:36:07.053335979 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.053335979 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:07.053335979 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.053335979 +0200 +@@ -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 , 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 ++ . */ ++ ++#include ++ ++#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-07-25 20:36:07.053335979 +0200 +@@ -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 ++ . */ ++ ++#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-07-25 20:36:07.053335979 +0200 +@@ -0,0 +1,23 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++#include ++ ++/* 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 ++#include ++ ++#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-07-25 20:36:07.037335895 +0200 +@@ -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 . */ + +-#include +-#define _ASM +-#define _SETJMP_H +-#include ++#include + + .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-07-25 20:36:07.053335979 +0200 +@@ -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 , 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 ++ . */ ++ ++#include ++ ++#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-07-25 20:36:07.037335895 +0200 +@@ -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-07-25 20:36:07.053335979 +0200 +@@ -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 ++ . */ + + ++#include <_lfs_64.h> + #define _ERRNO_H 1 +-#include + #include + #include + +-#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-07-25 20:36:07.053335979 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #define _ERRNO_H 1 + #include +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-07-25 20:36:07.053335979 +0200 +@@ -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 +-#include +-#include ++ License along with the GNU C Library; if not, see ++ . */ + +-#if defined __NR_fadvise64_64 || defined __NR_fadvise64 ++#include <_lfs_64.h> ++#include + +-/* 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-07-25 20:36:07.053335979 +0200 +@@ -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 , 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 ++ . */ ++ ++#include ++ ++#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-07-25 20:36:07.053335979 +0200 +@@ -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 +- ++ License along with the GNU C Library; if not, see ++ . */ + + .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-07-25 20:36:07.053335979 +0200 +@@ -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 . + + Totally hacked up for uClibc by Erik Andersen + */ +@@ -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-07-25 20:36:07.053335979 +0200 +@@ -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 , 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 ++ . */ ++ ++#include ++ ++#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-07-25 20:36:07.053335979 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #define _ERRNO_H 1 + #include +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-07-25 20:36:07.069336063 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.069336063 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.069336063 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.069336063 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.069336063 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.069336063 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.069336063 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.069336063 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.069336063 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.069336063 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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 + # 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-07-25 20:36:07.069336063 +0200 +@@ -0,0 +1,30 @@ ++#include ++#include ++#include ++ ++-- ++ ++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-07-25 20:36:07.069336063 +0200 +@@ -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-07-25 20:36:07.097336209 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.097336209 +0200 +@@ -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-07-25 20:36:07.097336209 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.097336209 +0200 +@@ -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 . + # + # 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-07-25 20:36:07.097336209 +0200 +@@ -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 . + # + + /* +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-07-25 20:36:07.097336209 +0200 +@@ -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 . + # + # 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-07-25 20:36:07.097336209 +0200 +@@ -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-07-25 20:36:07.109336272 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.109336272 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.109336272 +0200 +@@ -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-07-25 20:36:07.137336419 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:07.137336419 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.137336419 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.137336419 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FENV_H + # error "Never use directly; include 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-07-25 20:36:07.137336419 +0200 +@@ -0,0 +1,41 @@ ++/* `HUGE_VALL' constant for ia64 (where it is infinity). ++ Used by and 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 ++ . */ ++ ++#ifndef _MATH_H ++# error "Never use directly; include 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-07-25 20:36:07.137336419 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_IPC_H + # error "Never use directly; include 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-07-25 20:36:07.137336419 +0200 +@@ -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-07-25 20:36:07.137336419 +0200 +@@ -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 . */ ++ ++/* 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 ++ ++/* 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-07-25 20:36:07.137336419 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _MATH_H && !defined _COMPLEX_H + # error "Never use directly; include 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-07-25 20:36:07.137336419 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _MATH_H + # error "Never use directly; include 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-07-25 20:36:07.137336419 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_MSG_H + #error "Never use directly; include 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-07-25 20:36:07.137336419 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SEM_H + # error "Never include directly; use 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-07-25 20:36:07.137336419 +0200 +@@ -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 . + +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.137336419 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SHM_H + # error "Never include directly; use 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-07-25 20:36:07.137336419 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SIGNAL_H + # error "Never include directly; use 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-07-25 20:36:07.137336419 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H + # error "Never use directly; include 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-07-25 20:36:07.141336440 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.141336440 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SIGNAL_H + # error "Never include this file directly. Use 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-07-25 20:36:07.141336440 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.141336440 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STAT_H + # error "Never include directly; use 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-07-25 20:36:07.141336440 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.141336440 +0200 +@@ -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-07-25 20:36:07.141336440 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.141336440 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.141336440 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.141336440 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.145336461 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + #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-07-25 20:36:07.145336461 +0200 +@@ -0,0 +1,11 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++ ++/* 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-07-25 20:36:07.125336356 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. ++ License along with the GNU C Library; if not, see ++ . + + 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-07-25 20:36:07.125336356 +0200 +@@ -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-07-25 20:36:07.145336461 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* __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-07-25 20:36:07.145336461 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. ++ License along with the GNU C Library; if not, see ++ . + + 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-07-25 20:36:07.165336566 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.165336566 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.165336566 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.165336566 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.165336566 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.165336566 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.165336566 +0200 +@@ -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 ++ . */ + + #ifndef _LINUX_IA64_SYSDEP_H + #define _LINUX_IA64_SYSDEP_H 1 + ++#include + #include + #include + +@@ -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-07-25 20:36:07.165336566 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + #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-07-25 20:36:07.189336691 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.189336691 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.189336691 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FENV_H + # error "Never use directly; include 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-07-25 20:36:07.189336691 +0200 +@@ -0,0 +1,42 @@ ++/* `HUGE_VALL' constant for m68k (where it is infinity). ++ Used by and 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 ++ . */ ++ ++#ifndef _MATH_H ++# error "Never use directly; include 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-07-25 20:36:07.189336691 +0200 +@@ -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-07-25 20:36:07.189336691 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _MATH_H && !defined _COMPLEX_H + # error "Never use directly; include 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-07-25 20:36:07.189336691 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.189336691 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_POLL_H + # error "Never use directly; include 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-07-25 20:36:07.189336691 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* Define the machine-dependent type `jmp_buf'. m68k version. */ + #ifndef _BITS_SETJMP_H +@@ -25,7 +24,7 @@ + # error "Never include directly; use instead." + #endif + +-#ifndef _ASM ++#include + + 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-07-25 20:36:07.189336691 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.189336691 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.189336691 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STAT_H + # error "Never include directly; use 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-07-25 20:36:07.189336691 +0200 +@@ -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-07-25 20:36:07.189336691 +0200 +@@ -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 ++ * . + */ + + /* 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-07-25 20:36:07.189336691 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.189336691 +0200 +@@ -2,9 +2,8 @@ + /* Copyright (C) 2002, David McCullough */ + /* This file is released under the LGPL, any version you like */ + +-#define _ASM +-#define _SETJMP_H +-#include ++#include ++#include + #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/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-07-25 20:36:07.189336691 +0200 +@@ -2,9 +2,8 @@ + /* Copyright (C) 2002, David McCullough */ + /* This file is released under the LGPL, any version you like */ + +-#define _ASM +-#define _SETJMP_H +-#include ++#include ++#include + + .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/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-07-25 20:36:07.189336691 +0200 +@@ -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 ++ . */ + + #include + #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-07-25 20:36:07.193336713 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.193336713 +0200 +@@ -0,0 +1,19 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include ++ ++#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-07-25 20:36:07.193336713 +0200 +@@ -0,0 +1,11 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++ ++/* 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-07-25 20:36:07.177336629 +0200 +@@ -2,10 +2,8 @@ + /* Copyright (C) 2002, David McCullough */ + /* This file is released under the LGPL, any version you like */ + +-#define _ASM +-#define _SETJMP_H + #include +-#include ++#include + + .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-07-25 20:36:07.177336629 +0200 +@@ -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-07-25 20:36:07.193336713 +0200 +@@ -2,9 +2,8 @@ + /* Copyright (C) 2002, David McCullough */ + /* This file is released under the LGPL, any version you like */ + +-#define _ASM +-#define _SETJMP_H +-#include ++#include ++#include + #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-07-25 20:36:07.205336775 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.205336775 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.205336775 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.205336775 +0200 +@@ -4,9 +4,7 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +- +-#include ++#include + + #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-07-25 20:36:06.477332962 +0200 +@@ -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-07-25 20:36:07.233336922 +0200 +@@ -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 ++#include ++ ++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-07-25 20:36:07.233336922 +0200 +@@ -0,0 +1,12 @@ ++/* Meta is little endian ++ * ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. ++ */ ++ ++#ifndef _ENDIAN_H ++# error "Never use directly; include 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-07-25 20:36:07.233336922 +0200 +@@ -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 directly; include instead." ++#endif ++ ++#include ++#ifdef __USE_GNU ++# include ++#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-07-25 20:36:07.237336943 +0200 +@@ -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 directly; include 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-07-25 20:36:07.237336943 +0200 +@@ -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 directly; include instead." ++#endif ++ ++#include ++ ++/* 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-07-25 20:36:07.237336943 +0200 +@@ -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 ++ * ++ * 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-07-25 20:36:07.237336943 +0200 +@@ -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 ++ ++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-07-25 20:36:07.237336943 +0200 +@@ -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 directly; use 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-07-25 20:36:07.237336943 +0200 +@@ -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-07-25 20:36:07.237336943 +0200 +@@ -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-07-25 20:36:07.237336943 +0200 +@@ -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 directly; include 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 ++ ++#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-07-25 20:36:07.237336943 +0200 +@@ -0,0 +1,46 @@ ++/* ++ * Track misc arch-specific features that aren't config options ++ * ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * 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-07-25 20:36:07.237336943 +0200 +@@ -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-07-25 20:36:07.237336943 +0200 +@@ -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 ++#include ++#include ++ ++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-07-25 20:36:07.237336943 +0200 +@@ -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 ++#include ++ ++#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-07-25 20:36:07.237336943 +0200 +@@ -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 ++ ++ .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-07-25 20:36:07.237336943 +0200 +@@ -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-07-25 20:36:07.237336943 +0200 +@@ -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-07-25 20:36:07.237336943 +0200 +@@ -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 +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-07-25 20:36:07.221336859 +0200 +@@ -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-07-25 20:36:07.221336859 +0200 +@@ -0,0 +1,13 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2005 Erik Andersen ++# ++# 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-07-25 20:36:07.221336859 +0200 +@@ -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-07-25 20:36:07.237336943 +0200 +@@ -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 ++#include ++ ++_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-07-25 20:36:07.237336943 +0200 +@@ -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-07-25 20:36:07.245336985 +0200 +@@ -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 ++ ++__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-07-25 20:36:07.245336985 +0200 +@@ -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 ++#include ++#include ++#include ++ ++__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 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-07-25 20:36:07.249337006 +0200 +@@ -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 ++#include ++#include ++ ++/* We need the signal context definitions even if they are not used ++ included in . */ ++#include ++ ++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-07-25 20:36:07.249337006 +0200 +@@ -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-07-25 20:36:07.249337006 +0200 +@@ -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 ++#include ++#include ++#include ++ ++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-07-25 20:36:07.221336859 +0200 +@@ -0,0 +1,18 @@ ++/* Wrapper for setting errno. ++ * ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include ++#include ++ ++/* 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-07-25 20:36:07.249337006 +0200 +@@ -0,0 +1,59 @@ ++/* ++ * Assembler macros for Meta. ++ * ++ * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include ++ ++#include ++#include ++ ++#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-07-25 20:36:07.249337006 +0200 +@@ -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 ++ ++#define _ERRNO_H ++#include ++#include ++ ++#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-07-25 20:36:07.265337089 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.265337089 +0200 +@@ -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-07-25 20:36:07.265337089 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_POLL_H + # error "Never use directly; include 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-07-25 20:36:07.265337089 +0200 +@@ -19,7 +19,6 @@ + # error "Never include directly; use 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-07-25 20:36:07.265337089 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.265337089 +0200 +@@ -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-07-25 20:36:07.265337089 +0200 +@@ -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 ++ * . + */ + + /* 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-07-25 20:36:07.265337089 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.265337089 +0200 +@@ -0,0 +1,6 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * 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-07-25 20:36:07.265337089 +0200 +@@ -0,0 +1,11 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++ ++/* 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-07-25 20:36:07.257337048 +0200 +@@ -12,10 +12,6 @@ + * Written by Miles Bader + */ + +-#define _SETJMP_H +-#define _ASM +-#include +- + #include + + .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-07-25 20:36:07.257337048 +0200 +@@ -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 . + + 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-07-25 20:36:07.257337048 +0200 +@@ -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 +- * +- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +- */ +- +-#include +-#include +-#include +-#include +- +- +-_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-07-25 20:36:07.265337089 +0200 +@@ -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 ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.281337173 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.281337173 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.281337173 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.281337173 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.281337173 +0200 +@@ -13,21 +13,15 @@ + * Microblaze port by John Williams + */ + +-#define _ERRNO_H 1 +-#include +-#define _SYSCALL_H +-#include +- +-#include ++#include + + /* 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-07-25 20:36:07.309337320 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _MIPS_BITS_ATOMIC_H + #define _MIPS_BITS_ATOMIC_H 1 +@@ -84,10 +83,10 @@ + in which values are returned. */ + + #define __arch_compare_and_exchange_xxx_8_int(mem, newval, oldval, rel, acq) \ +- (abort (), __prev = __cmp = 0) ++ (abort (), __prev = 0, __cmp = 0) + + #define __arch_compare_and_exchange_xxx_16_int(mem, newval, oldval, rel, acq) \ +- (abort (), __prev = __cmp = 0) ++ (abort (), __prev = 0, __cmp = 0) + + #define __arch_compare_and_exchange_xxx_32_int(mem, newval, oldval, rel, acq) \ + __asm__ __volatile__ ( \ +@@ -111,7 +110,7 @@ + #if _MIPS_SIM == _ABIO32 + /* We can't do an atomic 64-bit operation in O32. */ + #define __arch_compare_and_exchange_xxx_64_int(mem, newval, oldval, rel, acq) \ +- (abort (), __prev = __cmp = 0) ++ (abort (), __prev = 0, __cmp = 0) + #else + #define __arch_compare_and_exchange_xxx_64_int(mem, newval, oldval, rel, acq) \ + __asm__ __volatile__ ("\n" \ +@@ -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 attribute_unused; \ + __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 attribute_unused; \ + __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 attribute_unused; \ + __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 attribute_unused; \ + __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-07-25 20:36:07.309337320 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _DIRENT_H + # error "Never use directly; include 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-07-25 20:36:07.309337320 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _DLFCN_H + # error "Never use directly; include 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-07-25 20:36:07.309337320 +0200 +@@ -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 ++ . */ ++ ++#ifndef _SYS_EVENTFD_H ++# error "Never use directly; include 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-07-25 20:36:07.309337320 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.309337320 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FENV_H + # error "Never use directly; include 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-07-25 20:36:07.309337320 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_IOCTL_H + # error "Never use directly; include 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-07-25 20:36:07.309337320 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_IPC_H + # error "Never use directly; include 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-07-25 20:36:07.309337320 +0200 +@@ -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-07-25 20:36:07.309337320 +0200 +@@ -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-07-25 20:36:07.309337320 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _MATH_H && !defined _COMPLEX_H + # error "Never use directly; include 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-07-25 20:36:07.309337320 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_MMAN_H + # error "Never use directly; include 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-07-25 20:36:07.309337320 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_MSG_H + # error "Never use directly; include 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-07-25 20:36:07.309337320 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_POLL_H + # error "Never use directly; include 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-07-25 20:36:07.309337320 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_RESOURCE_H + # error "Never use directly; include 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-07-25 20:36:07.309337320 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SEM_H + # error "Never include directly; use 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-07-25 20:36:07.309337320 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _BITS_SETJMP_H + #define _BITS_SETJMP_H 1 +@@ -26,13 +25,19 @@ + + #include + ++#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-07-25 20:36:07.309337320 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SHM_H + # error "Never include directly; use 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-07-25 20:36:07.313337341 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SIGNAL_H + # error "Never include directly; use 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-07-25 20:36:07.313337341 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.313337341 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + #include +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-07-25 20:36:07.313337341 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.313337341 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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 /* 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-07-25 20:36:07.313337341 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SIGNAL_H + # error "Never include this file directly. Use 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 directly; use instead." +-#endif +- +-#define __need_size_t +-#define __need_NULL +-#include +- +-#include +-#include +- +-/* 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 +- +-/* 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 +- . */ +-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 +-#undef __GLIBC__ +-#else +-#include +-#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-07-25 20:36:07.313337341 +0200 +@@ -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 ++ . */ ++ ++#ifndef _SYS_SOCKET_H ++# error "Never include directly; use 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-07-25 20:36:07.313337341 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.313337341 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STATFS_H + # error "Never include directly; use 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-07-25 20:36:07.313337341 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STAT_H + # error "Never include directly; use 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-07-25 20:36:07.313337341 +0200 +@@ -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-07-25 20:36:07.313337341 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _TERMIOS_H + # error "Never include directly; use 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-07-25 20:36:07.313337341 +0200 +@@ -4,6 +4,7 @@ + + #ifndef _BITS_UCLIBC_ARCH_FEATURES_H + #define _BITS_UCLIBC_ARCH_FEATURES_H ++#include + + /* 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-07-25 20:36:07.313337341 +0200 +@@ -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 ++ * . + */ + + /* 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-07-25 20:36:07.313337341 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.313337341 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.313337341 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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/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-07-25 20:36:07.313337341 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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/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-07-25 20:36:07.313337341 +0200 +@@ -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 ++ . */ + +-#include +-#include + #include + + #ifdef __NR_cacheflush ++# include + _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 + _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-07-25 20:36:07.313337341 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.313337341 +0200 +@@ -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 ++ . */ + + + #include +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-07-25 20:36:07.313337341 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.313337341 +0200 +@@ -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 . ++ ++ 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 ++ . */ ++ ++#include ++#include ++#include ++#include ++ ++#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-07-25 20:36:07.313337341 +0200 +@@ -0,0 +1,22 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++ ++/* 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 ++#include ++ ++#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-07-25 20:36:07.313337341 +0200 +@@ -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-07-25 20:36:07.297337257 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.313337341 +0200 +@@ -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 . ++ ++ 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 ++ . */ ++ ++#include ++#include ++#include ++#include ++ ++#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-07-25 20:36:07.297337257 +0200 +@@ -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 +- * +- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +- */ +- +-#include +-#include +-#include +-#include +- +- +-#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-07-25 20:36:07.313337341 +0200 +@@ -8,36 +8,28 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +-#include +-#include +-#include +-#include +-#include ++#include <_lfs_64.h> + #include +-#include ++#include + +-#ifdef __UCLIBC_HAS_LFS__ ++/* MIPS kernel only has NR_fadvise64 which acts as NR_fadvise64_64 */ ++#if defined __NR_fadvise64 && __WORDSIZE == 32 ++# include ++# include + +-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-07-25 20:36:07.313337341 +0200 +@@ -8,19 +8,16 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +-#include +-#include +-#include +-#include +-#include + #include +-#include + +-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 ++# include ++# include ++ ++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-07-25 20:36:07.313337341 +0200 +@@ -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 + #include +-#include + #include + #include + +-#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 +- +- +-#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 +-#include +-#include +-#include +- +-#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-07-25 20:36:07.313337341 +0200 +@@ -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 . ++ ++ 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 ++ . */ ++ ++#include ++#include ++#include ++#include ++ ++#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-07-25 20:36:07.313337341 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:07.313337341 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:07.313337341 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.313337341 +0200 +@@ -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 . + + Totally hacked up for uClibc by Erik Andersen + */ +@@ -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-07-25 20:36:07.313337341 +0200 +@@ -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 . ++ ++ 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 ++ . */ ++ ++#include ++#include ++#include ++#include ++ ++#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-07-25 20:36:07.333337446 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.333337446 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.333337446 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.333337446 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.333337446 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.333337446 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.333337446 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.333337446 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.333337446 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.333337446 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:07.333337446 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.333337446 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.297337257 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.333337446 +0200 +@@ -0,0 +1,52 @@ ++#include ++#include ++#include ++#include ++ ++#include ++ ++-- 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-07-25 20:36:07.333337446 +0200 +@@ -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 ++ . */ + + /* vfork() is just a special case of clone(). */ + ++#include + #include + #include + +@@ -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-07-25 20:36:07.369337634 +0200 +@@ -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 . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.369337634 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _MATH_H && !defined _COMPLEX_H + # error "Never use directly; include 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-07-25 20:36:07.369337634 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* Define the machine-dependent type `jmp_buf'. Nios version. */ + #ifndef _BITS_SETJMP_H +@@ -24,8 +23,6 @@ + # error "Never include directly; use instead." + #endif + +-#ifndef _ASM +- + #include + + 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-07-25 20:36:07.369337634 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.369337634 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.369337634 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STAT_H + # error "Never include directly; use 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-07-25 20:36:07.369337634 +0200 +@@ -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-07-25 20:36:07.369337634 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.369337634 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.369337634 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.369337634 +0200 +@@ -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 . */ + + #include + #include +@@ -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-07-25 20:36:07.369337634 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.369337634 +0200 +@@ -0,0 +1,25 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * 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-07-25 20:36:07.369337634 +0200 +@@ -0,0 +1,11 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++ ++/* 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-07-25 20:36:07.353337550 +0200 +@@ -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 +-#define _ASM +-#define _SETJMP_H +-#include ++ see . */ + ++#include + + ;---------------------------------------- + ; 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-07-25 20:36:07.353337550 +0200 +@@ -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-07-25 20:36:07.369337634 +0200 +@@ -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 . */ + +-#include +-#define _ASM +-#define _SETJMP_H +-#include ++#include + #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-07-25 20:36:07.385337718 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.385337718 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.385337718 +0200 +@@ -10,9 +10,6 @@ + * Written by Wentao Xu + */ + +-#include +- +-#include + #include + #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-07-25 20:36:07.417337886 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.417337886 +0200 +@@ -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-07-25 20:36:07.417337886 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _MATH_H && !defined _COMPLEX_H + # error "Never use directly; include 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-07-25 20:36:07.417337886 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _BITS_SETJMP_H + #define _BITS_SETJMP_H 1 +@@ -24,7 +23,6 @@ + # error "Never include directly; use 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-07-25 20:36:07.417337886 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.417337886 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.417337886 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STAT_H + # error "Never include directly; use 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-07-25 20:36:07.417337886 +0200 +@@ -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-07-25 20:36:07.417337886 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.417337886 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.417337886 +0200 +@@ -12,9 +12,8 @@ + */ + + +-#define _ASM +-#define _SETJMP_H +-#include ++#include ++#include + + .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/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-07-25 20:36:07.417337886 +0200 +@@ -11,9 +11,8 @@ + * + */ + +-#define _ASM +-#define _SETJMP_H +-#include ++#include ++#include + + .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/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-07-25 20:36:07.417337886 +0200 +@@ -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-07-25 20:36:07.417337886 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.417337886 +0200 +@@ -0,0 +1,20 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include ++ ++#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-07-25 20:36:07.417337886 +0200 +@@ -0,0 +1,11 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++ ++/* 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-07-25 20:36:07.405337823 +0200 +@@ -12,9 +12,7 @@ + */ + + #include +-#define _ASM +-#define _SETJMP_H +-#include ++#include + + .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-07-25 20:36:07.405337823 +0200 +@@ -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-07-25 20:36:07.417337886 +0200 +@@ -12,9 +12,7 @@ + */ + + #include +-#define _ASM +-#define _SETJMP_H +-#include ++#include + + .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-07-25 20:36:07.437337991 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.437337991 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.437337991 +0200 +@@ -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 ++ * . + */ + + #include +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-07-25 20:36:07.437337991 +0200 +@@ -10,11 +10,7 @@ + * Written by Wentao Xu + */ + +-#include +- +-#define _ERRNO_H +-#include +-#include ++#include + + #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-07-25 20:36:07.473338180 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -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 ++ . */ + + /* 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 ++ . */ + + /* + * 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-07-25 20:36:07.473338180 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.473338180 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.473338180 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FENV_H + # error "Never use directly; include 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-07-25 20:36:07.473338180 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.477338200 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_IPC_H + # error "Never use directly; include 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-07-25 20:36:07.477338200 +0200 +@@ -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-07-25 20:36:07.477338200 +0200 +@@ -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 . */ ++ ++/* 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 ++ ++/* 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-07-25 20:36:07.477338200 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.477338200 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.477338200 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_MMAN_H + # error "Never use directly; iclude 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-07-25 20:36:07.477338200 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_MSG_H + # error "Never use directly; include 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-07-25 20:36:07.477338200 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SEM_H + # error "Never include directly; use 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-07-25 20:36:07.477338200 +0200 +@@ -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 ++ . */ + + /* Define the machine-dependent type `jmp_buf'. PowerPC version. */ + #ifndef _BITS_SETJMP_H +@@ -31,30 +31,6 @@ + + #include + +-#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-07-25 20:36:07.477338200 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SHM_H + # error "Never include directly; use 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-07-25 20:36:07.477338200 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.477338200 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.477338200 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STAT_H + # error "Never include directly; use 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-07-25 20:36:07.477338200 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.477338200 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _TERMIOS_H + # error "Never include directly; use 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-07-25 20:36:07.477338200 +0200 +@@ -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-07-25 20:36:07.477338200 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:07.477338200 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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/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-07-25 20:36:07.477338200 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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/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-07-25 20:36:07.477338200 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:07.477338200 +0200 +@@ -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 ++ * . + */ + + #include +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-07-25 20:36:07.477338200 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* + * ISO C99 7.6: Floating-point environment +@@ -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-07-25 20:36:07.477338200 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.477338200 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.477338200 +0200 +@@ -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 ++ . */ ++ ++#include ++ ++#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-07-25 20:36:07.477338200 +0200 +@@ -0,0 +1,23 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++#include ++ ++/* 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 ++#include ++ ++#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-07-25 20:36:07.457338096 +0200 +@@ -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 ++ . */ + + #include + #include "ppc_asm.h" +-#define _ASM +-#define _SETJMP_H +-#include ++#include + + + #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-07-25 20:36:07.457338096 +0200 +@@ -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 +- * +- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +- */ +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#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 +- * +- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +- */ +- +-#include +-#include +- +-#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-07-25 20:36:07.493338284 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #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-07-25 20:36:07.505338346 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #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-07-25 20:36:07.505338346 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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 +- * +- * 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 +-#include +-#include +- +-#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-07-25 20:36:07.505338346 +0200 +@@ -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 ++ . */ + + #include + #include "ppc_asm.h" +-#define _ASM +-#define _SETJMP_H +-#include ++#include + + #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-07-25 20:36:07.521338430 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.521338430 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.521338430 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.521338430 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.521338430 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -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-07-25 20:36:07.521338430 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.521338430 +0200 +@@ -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-07-25 20:36:06.477332962 +0200 +@@ -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-07-25 20:36:07.549338578 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.549338578 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.549338578 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FENV_H + # error "Never use directly; include 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-07-25 20:36:07.549338578 +0200 +@@ -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 ++ . */ + + #ifndef _MATH_H + # error "Never use directly; include 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-07-25 20:36:07.549338578 +0200 +@@ -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-07-25 20:36:07.549338578 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _MATH_H && !defined _COMPLEX_H + # error "Never use directly; include 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-07-25 20:36:07.549338578 +0200 +@@ -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 ++ . */ + + /* 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 directly; use 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-07-25 20:36:07.549338578 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SHM_H + # error "Never include directly; use 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-07-25 20:36:07.549338578 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.549338578 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.549338578 +0200 +@@ -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-07-25 20:36:07.549338578 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.553338598 +0200 +@@ -6,10 +6,9 @@ + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ +-#include +-#include + #include + + #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-07-25 20:36:07.553338598 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.553338598 +0200 +@@ -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 . + */ + + +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-07-25 20:36:07.537338514 +0200 +@@ -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 . + */ + + #include +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-07-25 20:36:07.553338598 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.553338598 +0200 +@@ -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 ++ . */ ++ ++#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-07-25 20:36:07.553338598 +0200 +@@ -0,0 +1,22 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++ ++/* 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 ++#include ++ ++#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-07-25 20:36:07.537338514 +0200 +@@ -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 . */ + +-#define _SETJMP_H +-#define _ASM +-#include + #include + + /* __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-07-25 20:36:07.537338514 +0200 +@@ -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 +-#include +-#include +- +- +-#ifdef HIOS +-# define __SH_SYSCALL6_TRAPA 0x2E +-#endif +- +-#include +- +-_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-07-25 20:36:07.553338598 +0200 +@@ -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 +-#include +-#include +-#include +- +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include +-#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-07-25 20:36:07.553338598 +0200 +@@ -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 . */ + + #include +-#define _SETJMP_H +-#define _ASM +-#include ++#include + + .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-07-25 20:36:07.553338598 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.553338598 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.553338598 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.553338598 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.557338620 +0200 +@@ -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 ++ . */ + + #include + + #include +-#include + + #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-07-25 20:36:07.557338620 +0200 +@@ -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 . + + 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 + #include + #define _ERRNO_H + #include +-#include + + /* 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-07-25 20:36:07.589338787 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.589338787 +0200 +@@ -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-07-25 20:36:07.589338787 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.589338787 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SHM_H + # error "Never include directly; use 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-07-25 20:36:07.589338787 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.589338787 +0200 +@@ -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-07-25 20:36:07.589338787 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:07.573338703 +0200 +@@ -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 . */ + + + #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-07-25 20:36:07.573338703 +0200 +@@ -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-07-25 20:36:07.589338787 +0200 +@@ -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 . */ + + + #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-07-25 20:36:07.589338787 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.589338787 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:07.625338976 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.625338976 +0200 +@@ -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 ++ . */ ++ ++#ifndef _SYS_EVENTFD_H ++# error "Never use directly; include 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-07-25 20:36:07.625338976 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.625338976 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FENV_H + # error "Never use directly; include 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-07-25 20:36:07.625338976 +0200 +@@ -0,0 +1,48 @@ ++/* `HUGE_VALL' constant for IEEE 754 machines (where it is infinity). ++ Used by and 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 ++ . */ ++ ++#ifndef _MATH_H ++# error "Never use directly; include instead." ++#endif ++ ++#if __GNUC_PREREQ(3,3) ++# define HUGE_VALL (__builtin_huge_vall()) ++#else ++# include ++# 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-07-25 20:36:07.625338976 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_IOCTL_H + # error "Never use directly; include 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-07-25 20:36:07.625338976 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_IPC_H + # error "Never use directly; include 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-07-25 20:36:07.625338976 +0200 +@@ -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-07-25 20:36:07.625338976 +0200 +@@ -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 . */ ++ ++/* 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 ++ ++/* 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-07-25 20:36:07.625338976 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _MATH_H && !defined _COMPLEX_H + # error "Never use directly; include 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-07-25 20:36:07.633339018 +0200 +@@ -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 ++ . */ + + #ifndef _MATH_H + # error "Never use directly; include 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-07-25 20:36:07.633339018 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_MMAN_H + # error "Never use directly; include 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-07-25 20:36:07.633339018 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_MSG_H + # error "Never use directly; include 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-07-25 20:36:07.633339018 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_POLL_H + # error "Never use directly; include 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-07-25 20:36:07.637339038 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_RESOURCE_H + # error "Never use directly; include 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-07-25 20:36:07.637339038 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SEM_H + # error "Never include directly; use 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-07-25 20:36:07.637339038 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.637339038 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SHM_H + # error "Never include directly; use 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-07-25 20:36:07.637339038 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SIGNAL_H + # error "Never include directly; use 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-07-25 20:36:07.637339038 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H + # error "Never use directly; include 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-07-25 20:36:07.637339038 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.637339038 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.637339038 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.637339038 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SIGNAL_H + # error "Never include this file directly. Use 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 directly; use instead." +-#endif +- +-#define __need_size_t +-#define __need_NULL +-#include +- +-#include +-#include +- +-/* 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 +- +-/* 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 +- . */ +-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 +-#undef __GLIBC__ +-#else +-#include +-#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-07-25 20:36:07.637339038 +0200 +@@ -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 ++ . */ ++ ++#ifndef _SYS_SOCKET_H ++# error "Never include directly; use 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-07-25 20:36:07.637339038 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.637339038 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STAT_H + # error "Never include directly; use 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-07-25 20:36:07.637339038 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _TERMIOS_H + # error "Never include directly; use 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-07-25 20:36:07.637339038 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _BITS_TYPES_H + # error "Never include directly; use 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-07-25 20:36:07.637339038 +0200 +@@ -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-07-25 20:36:07.637339038 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.637339038 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.637339038 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:07.637339038 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* Code taken from glibc2.2.2/sysdeps/unix/sysv/linux/sparc/vfork.S */ + +@@ -23,11 +22,14 @@ + #include + + .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-07-25 20:36:07.637339038 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.637339038 +0200 +@@ -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 ++ . */ ++ ++#include ++ ++#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-07-25 20:36:07.637339038 +0200 +@@ -0,0 +1,31 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++#include ++ ++#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-07-25 20:36:07.625338976 +0200 +@@ -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 ++ . */ + +-#include +-#include ++#include + +-#define _ASM 1 +-#define _SETJMP_H +-#include + #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-07-25 20:36:07.621338955 +0200 +@@ -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-07-25 20:36:07.637339038 +0200 +@@ -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 ++ . ++ + Ported to uClibc by: + Austin Foxley, Ceton Corporation + */ +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-07-25 20:36:07.637339038 +0200 +@@ -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 ++ . */ + +-#include ++#include + +-#define _ASM 1 +-#define _SETJMP_H +-#include + #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-07-25 20:36:07.637339038 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. ++ License along with the GNU C Library; if not, see ++ . + + Ported to uClibc from glibc: 090520: + Jan Buchholz, KIP, Uni Heidelberg +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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:07.653339122 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if 0 + #include +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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.653339122 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.657339142 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.657339142 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.657339142 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.657339142 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.657339142 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:07.657339142 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.657339142 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.689339310 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.705339394 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.705339394 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.705339394 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.705339394 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.705339394 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.705339394 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.733339541 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.733339541 +0200 +@@ -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-07-25 20:36:07.733339541 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_POLL_H + # error "Never use directly; include 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-07-25 20:36:07.733339541 +0200 +@@ -18,7 +18,6 @@ + # error "Never include directly; use 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-07-25 20:36:07.733339541 +0200 +@@ -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-07-25 20:36:07.733339541 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.733339541 +0200 +@@ -0,0 +1,6 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * 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-07-25 20:36:07.733339541 +0200 +@@ -0,0 +1,11 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++ ++/* 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-07-25 20:36:07.717339457 +0200 +@@ -11,11 +11,6 @@ + * Written by Miles Bader + */ + +-#include +-#define _SETJMP_H +-#define _ASM +-#include +- + #include + + .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-07-25 20:36:07.717339457 +0200 +@@ -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 +- * +- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +- */ +- +-#include +-#include +-#include +-#include +- +- +-_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-07-25 20:36:07.733339541 +0200 +@@ -11,10 +11,6 @@ + * Written by Miles Bader + */ + +-#define _SETJMP_H +-#define _ASM +-#include +- + #include + + .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-07-25 20:36:07.745339604 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.745339604 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.745339604 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.745339604 +0200 +@@ -11,12 +11,7 @@ + * Written by Miles Bader + */ + +-#include +-#define _ERRNO_H 1 +-#include +-#define _SYSCALL_H +-#include +- ++#include + #include + + /* 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-07-25 20:36:07.773339751 +0200 +@@ -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 . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.773339751 +0200 +@@ -0,0 +1,25 @@ ++/* `HUGE_VAL' constant for Vaxen. ++ Used by and 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 ++ . */ ++ ++#ifndef _MATH_H ++# error "Never use directly; include 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-07-25 20:36:07.773339751 +0200 +@@ -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 . */ + + #ifndef _SYS_IPC_H + # error "Never use directly; include 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 , 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 +- +-/* 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-07-25 20:36:07.773339751 +0200 +@@ -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 . */ + + #ifndef _SYS_SEM_H + # error "Never include directly; use 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-07-25 20:36:07.773339751 +0200 +@@ -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-07-25 20:36:07.773339751 +0200 +@@ -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 . */ + + #ifndef _SYS_SHM_H + # error "Never include directly; use 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-07-25 20:36:07.773339751 +0200 +@@ -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 . */ + + #if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H + # error "Never use directly; include 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 directly; use instead." +-#endif +- +-#include /* 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-07-25 20:36:07.773339751 +0200 +@@ -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-07-25 20:36:07.773339751 +0200 +@@ -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 . */ + + #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-07-25 20:36:07.773339751 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.773339751 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:07.781339792 +0200 +@@ -0,0 +1,11 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++ ++/* 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-07-25 20:36:07.757339667 +0200 +@@ -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 +-#include +-#include +-#include +- +-_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-07-25 20:36:07.793339855 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.793339855 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.813339960 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.813339960 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.813339960 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _UNISTD_H + # error "Never include this file directly. Use 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-07-25 20:36:07.813339960 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.813339960 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _FENV_H + # error "Never use directly; include 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-07-25 20:36:07.813339960 +0200 +@@ -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-07-25 20:36:07.813339960 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #if !defined _MATH_H && !defined _COMPLEX_H + # error "Never use directly; include 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-07-25 20:36:07.813339960 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _MATH_H + # error "Never use directly; include 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-07-25 20:36:07.813339960 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_MSG_H + # error "Never use directly; include 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-07-25 20:36:07.813339960 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SEM_H + # error "Never include directly; use 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-07-25 20:36:07.813339960 +0200 +@@ -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 ++ . */ + + /* 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 directly; use instead." +@@ -27,52 +26,9 @@ + #include + + #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-07-25 20:36:07.813339960 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_SHM_H + # error "Never include directly; use 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-07-25 20:36:07.813339960 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.813339960 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.813339960 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.813339960 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SYS_STAT_H + # error "Never include directly; use 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-07-25 20:36:07.813339960 +0200 +@@ -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-07-25 20:36:07.813339960 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.813339960 +0200 +@@ -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 +-#include ++ License along with the GNU C Library; if not, see ++ . */ + + .global setjmp + .type setjmp,%function +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-07-25 20:36:07.813339960 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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/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-07-25 20:36:07.813339960 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.813339960 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:07.817339982 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.817339982 +0200 +@@ -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 , 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 ++ . */ ++ ++#include ++ ++#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-07-25 20:36:07.817339982 +0200 +@@ -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 ++ . */ ++ ++#include ++ ++#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-07-25 20:36:07.817339982 +0200 +@@ -0,0 +1,28 @@ ++/* ++ * Copyright (C) 2000-2006 Erik Andersen ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++#include ++#include ++ ++/* 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 ++#include ++ ++#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-07-25 20:36:07.797339876 +0200 +@@ -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 ++ . */ + +-#include +-#define _ASM +-#define _SETJMP_H +-#include ++#include + + /* 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-07-25 20:36:07.817339982 +0200 +@@ -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 , 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 ++ . */ ++ ++#include ++#include ++#include ++#include ++ ++#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-07-25 20:36:07.797339876 +0200 +@@ -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 +- * Copyright (C) 2005 by Mike Frysinger +- * +- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +- */ +- +-#include +-#include +-#include +-#include +- +- +-_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-07-25 20:36:07.817339982 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.817339982 +0200 +@@ -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 , 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 ++ . */ ++ ++#include ++ ++#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-07-25 20:36:07.817339982 +0200 +@@ -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 ++ . */ + +-#define _ASM +-#define _SETJMP_H +-#include +-#include ++#include + + .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-07-25 20:36:07.817339982 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + #include +@@ -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 +@@ -115,11 +111,19 @@ + signal handlers work right. Important are both the names + (__restore_rt) and the exact instruction sequence. + If you ever feel the need to make any changes, please notify the +- appropriate GDB maintainer. */ ++ appropriate GDB maintainer. ++ ++ The unwind information starts a byte before __restore_rt, so that ++ it is found when unwinding, to get an address the unwinder assumes ++ will be in the middle of a call instruction. See the Linux kernel ++ (the i386 vsyscall, in particular) for an explanation of the complex ++ unwind information used here in order to get the traditional CFA. ++ */ + + #define RESTORE(name, syscall) RESTORE2(name, syscall) + #define RESTORE2(name, syscall) \ + __asm__ ( \ ++ "nop\n" \ + ".text\n" \ + "__" #name ":\n" \ + " movq $" #syscall ", %rax\n" \ +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-07-25 20:36:07.797339876 +0200 +@@ -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 , 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 ++ . */ ++ ++#include ++ ++/* 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-07-25 20:36:07.817339982 +0200 +@@ -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 , 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 ++ . */ ++ ++#include ++ ++#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-07-25 20:36:07.825340023 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.825340023 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.825340023 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.825340023 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.825340023 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.825340023 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.825340023 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.825340023 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.825340023 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.825340023 +0200 +@@ -0,0 +1,37 @@ ++#include ++#include ++#include ++ ++-- ++ ++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-07-25 20:36:07.825340023 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -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-07-25 20:36:07.853340170 +0200 +@@ -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 ++ . */ ++ ++#ifndef _BITS_ATOMIC_H ++#define _BITS_ATOMIC_H 1 ++ ++#include ++ ++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-07-25 20:36:07.853340170 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #ifndef _FCNTL_H + # error "Never use directly; include 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-07-25 20:36:07.853340170 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #ifndef _SYS_IPC_H + # error "Never use directly; include 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-07-25 20:36:07.853340170 +0200 +@@ -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-07-25 20:36:07.853340170 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #if !defined _MATH_H && !defined _COMPLEX_H + # error "Never use directly; include 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-07-25 20:36:07.853340170 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #ifndef _SYS_MMAN_H + # error "Never use directly; include 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-07-25 20:36:07.853340170 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #ifndef _SYS_MSG_H + # error "Never use directly; include 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-07-25 20:36:07.853340170 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + /* 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-07-25 20:36:07.853340170 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #ifndef _SYS_SHM_H + # error "Never include directly; use 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-07-25 20:36:07.853340170 +0200 +@@ -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 ++ . */ ++ ++#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H ++# error "Never use directly; include 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-07-25 20:36:07.853340170 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + /* 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-07-25 20:36:07.853340170 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + /* 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-07-25 20:36:07.853340170 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #ifndef _SYS_STAT_H + # error "Never include directly; use 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-07-25 20:36:07.853340170 +0200 +@@ -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 +- +-/* 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-07-25 20:36:07.853340170 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:07.853340170 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #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-07-25 20:36:07.853340170 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #include + #include +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-07-25 20:36:07.857340190 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:07.857340190 +0200 +@@ -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 ++ . */ + + #include + +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-07-25 20:36:07.857340190 +0200 +@@ -7,19 +7,19 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +-#include +-#define _SIGNAL_H +-#include + + /* Xtensa doesn't provide a 'fork' system call, so we use 'clone'. */ ++#include + +-extern __typeof(fork) __libc_fork; ++#if defined __NR_clone && defined __ARCH_USE_MMU__ ++# include ++# include ++# include + +-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-07-25 20:36:07.857340190 +0200 +@@ -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 ++ . */ ++ ++#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-07-25 20:36:07.857340190 +0200 +@@ -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 ++ . */ ++ ++/* Test if longjmp to JMPBUF would unwind the frame containing a local ++ variable at ADDRESS. */ ++ ++#include ++#include ++ ++#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-07-25 20:36:07.841340106 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + /* 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-07-25 20:36:07.841340106 +0200 +@@ -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-07-25 20:36:07.857340190 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #include "sysdep.h" + #include +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 +- * Copyright (C) 2007 Tensilica Inc. +- * +- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +- */ +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#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 +- * Copyright (C) 2007 Tensilica Inc. +- * +- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +- */ +- +-#include +-#include +- +-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 +- * +- * 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 +-#include +-#include +-#include +- +-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 +- +-#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-07-25 20:36:07.857340190 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + /* 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-07-25 20:36:07.873340274 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #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 +- +-/* 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-07-25 20:36:07.873340274 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #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-07-25 20:36:07.873340274 +0200 +@@ -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-07-25 20:36:07.873340274 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #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-07-25 20:36:07.873340274 +0200 +@@ -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 ++ . */ ++ ++#include + + #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-07-25 20:36:07.873340274 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #include "sysdep.h" + #include +@@ -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-07-25 20:36:07.873340274 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #include + +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-07-25 20:36:07.881340316 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.881340316 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.881340316 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.881340316 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.881340316 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.881340316 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.881340316 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.881340316 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.881340316 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.881340316 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.881340316 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.881340316 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.881340316 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.881340316 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.893340380 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.893340380 +0200 +@@ -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-07-25 20:36:07.893340380 +0200 +@@ -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-07-25 20:36:07.893340380 +0200 +@@ -0,0 +1,7 @@ ++/* Copyright (C) 2011-2013 Hennning Heinold ++ * ++ * 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-07-25 20:36:07.893340380 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.893340380 +0200 +@@ -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 ++ . */ + + /* + * Modified for uClibc by Manuel Novoa III on 1/5/01. +@@ -36,9 +35,6 @@ + # include + #endif + +-#define __FORCE_GLIBC +-#include +- + #include + + /* 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 +@@ -75,22 +71,12 @@ + # include + #endif + +-#if !defined __UCLIBC__ && !defined __UCLIBC_HAS_GETTEXT_AWARENESS__ + #ifdef _LIBC + # include + #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-07-25 20:36:07.893340380 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.893340380 +0200 +@@ -22,14 +22,7 @@ + #include + #include + #include +- +- +-#ifdef __UCLIBC_MJN3_ONLY__ +-#warning TODO: Enable gettext awareness. +-#endif /* __UCLIBC_MJN3_ONLY__ */ +- +-#undef _ +-#define _(X) X ++#include + + #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-07-25 20:36:07.893340380 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.893340380 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.893340380 +0200 +@@ -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-07-25 20:36:07.893340380 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.893340380 +0200 +@@ -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 . */ + + #include + #include +@@ -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-07-25 20:36:07.893340380 +0200 +@@ -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 . */ + + #define _XOPEN_SOURCE 500 + #include ++#include + #include + #include + #include +@@ -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-07-25 20:36:07.909340464 +0200 +@@ -5,7 +5,6 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#define __FORCE_GLIBC + #include + #include + #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-07-25 20:36:07.909340464 +0200 +@@ -5,7 +5,6 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#define __FORCE_GLIBC + #include + #include + #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-07-25 20:36:07.909340464 +0200 +@@ -56,7 +56,6 @@ + * alignment). + */ + +-#define __FORCE_GLIBC + #include + #include + #include +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-07-25 20:36:07.909340464 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* Written by Ulrich Drepper , 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-07-25 20:36:07.909340464 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.909340464 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.909340464 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* Written by Ulrich Drepper , 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-07-25 20:36:07.909340464 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.909340464 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.933340588 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.933340588 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -19,7 +19,7 @@ + #include "math_private.h" + #include + +-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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.937340610 +0200 +@@ -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-07-25 20:36:07.941340631 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.945340651 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.945340651 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.945340651 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.945340651 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.945340651 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.945340651 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:07.945340651 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.945340651 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.945340651 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.945340651 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.945340651 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.945340651 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.945340651 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.945340651 +0200 +@@ -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-07-25 20:36:07.945340651 +0200 +@@ -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-07-25 20:36:07.945340651 +0200 +@@ -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-07-25 20:36:07.945340651 +0200 +@@ -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-07-25 20:36:07.945340651 +0200 +@@ -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-07-25 20:36:07.957340715 +0200 +@@ -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 ++#include ++ ++#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-07-25 20:36:07.957340715 +0200 +@@ -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 ++#include ++ ++#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-07-25 20:36:07.957340715 +0200 +@@ -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 ++#include ++ ++#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-07-25 20:36:07.957340715 +0200 +@@ -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 ++ ++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-07-25 20:36:07.957340715 +0200 +@@ -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 ++ ++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-07-25 20:36:07.957340715 +0200 +@@ -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 ++ ++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-07-25 20:36:07.957340715 +0200 +@@ -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 ++#include ++ ++#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-07-25 20:36:07.957340715 +0200 +@@ -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 ++#include ++ ++#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-07-25 20:36:07.957340715 +0200 +@@ -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 ++#include ++ ++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-07-25 20:36:07.957340715 +0200 +@@ -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 ++#include ++ ++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-07-25 20:36:07.957340715 +0200 +@@ -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 ++ ++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-07-25 20:36:07.957340715 +0200 +@@ -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 ++#include ++ ++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-07-25 20:36:07.957340715 +0200 +@@ -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 ++#include ++#include ++ ++#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-07-25 20:36:07.957340715 +0200 +@@ -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 ++#include ++ ++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-07-25 20:36:07.957340715 +0200 +@@ -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-07-25 20:36:07.957340715 +0200 +@@ -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-07-25 20:36:07.981340840 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "fenv_libc.h" + #include +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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "fenv_libc.h" + #include +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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "fenv_libc.h" + #include +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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "fenv_libc.h" + #include +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-07-25 20:36:07.981340840 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.981340840 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "fenv_libc.h" + #include +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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "fenv_libc.h" + #include +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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.981340840 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.981340840 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:07.981340840 +0200 +@@ -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>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. */ + + #include + +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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:07.981340840 +0200 +@@ -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 ++ . */ + + #include + /* 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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:07.981340840 +0200 +@@ -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 ++ . */ + + #include + /* 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-07-25 20:36:07.981340840 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:07.981340840 +0200 +@@ -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-07-25 20:36:07.981340840 +0200 +@@ -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-07-25 20:36:07.985340862 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:07.985340862 +0200 +@@ -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-07-25 20:36:07.985340862 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + /* 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-07-25 20:36:07.985340862 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + /* 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-07-25 20:36:07.985340862 +0200 +@@ -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-07-25 20:36:07.985340862 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.001340946 +0200 +@@ -7,8 +7,6 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +- + 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-07-25 20:36:08.193341950 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.193341950 +0200 +@@ -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-07-25 20:36:08.193341950 +0200 +@@ -14,9 +14,8 @@ + Lesser General 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 . */ + + #include + #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-07-25 20:36:08.193341950 +0200 +@@ -15,7 +15,6 @@ + /* Thread cancellation */ + + #include +-#include + #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-07-25 20:36:08.193341950 +0200 +@@ -23,7 +23,7 @@ + #include + #include + #include +-#ifdef USE_TLS ++#ifdef __UCLIBC_HAS_TLS__ + #include + #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-07-25 20:36:08.193341950 +0200 +@@ -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-07-25 20:36:08.193341950 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + /* 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-07-25 20:36:08.193341950 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:08.193341950 +0200 +@@ -30,7 +30,7 @@ + #include + #include + +-#ifdef USE_TLS ++#ifdef __UCLIBC_HAS_TLS__ + #include + #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-07-25 20:36:08.193341950 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.193341950 +0200 +@@ -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 ++ . */ + + #include + #include + #include +-#ifdef USE_TLS ++#ifdef __UCLIBC_HAS_TLS__ + #include + #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-07-25 20:36:08.193341950 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.193341950 +0200 +@@ -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-07-25 20:36:08.193341950 +0200 +@@ -20,8 +20,8 @@ + #include + #include "pthread.h" + #include "internals.h" +-#ifndef NO_PTR_DEMANGLE + #include ++#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-07-25 20:36:08.193341950 +0200 +@@ -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 . */ + + #include + #include +-#include + #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-07-25 20:36:08.193341950 +0200 +@@ -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 . */ + + #include + #include +-#include + #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-07-25 20:36:08.193341950 +0200 +@@ -23,8 +23,6 @@ + #include + #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-07-25 20:36:08.197341972 +0200 +@@ -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 ++ . */ + + #include "internals.h" + #include +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-07-25 20:36:08.193341950 +0200 +@@ -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-07-25 20:36:08.197341972 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.197341972 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.197341972 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.197341972 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.197341972 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.197341972 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.197341972 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.197341972 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.193341950 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #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-07-25 20:36:08.197341972 +0200 +@@ -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 . */ + + #include + #include +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-07-25 20:36:08.197341972 +0200 +@@ -15,6 +15,7 @@ + /* Semaphores a la POSIX 1003.1b */ + + #include ++#include + #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-07-25 20:36:08.197341972 +0200 +@@ -17,6 +17,7 @@ + + #include + #include ++#include + #ifdef __USE_XOPEN2K + # define __need_timespec + # include +@@ -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-07-25 20:36:08.197341972 +0200 +@@ -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-07-25 20:36:08.197341972 +0200 +@@ -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-07-25 20:36:08.213342056 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:08.217342077 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.217342077 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.217342077 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.233342160 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.233342160 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.233342160 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.245342223 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.245342223 +0200 +@@ -14,9 +14,8 @@ + Lesser General 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 . */ + + #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-07-25 20:36:08.261342307 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.261342307 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.273342370 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.281342411 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.281342411 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.281342411 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.281342411 +0200 +@@ -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 . */ + + #ifndef __ASSEMBLER__ + #include /* 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-07-25 20:36:08.297342495 +0200 +@@ -14,9 +14,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.297342495 +0200 +@@ -14,9 +14,8 @@ + Lesser General 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 . */ + + #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-07-25 20:36:08.297342495 +0200 +@@ -2,7 +2,7 @@ + #include + + -- +-#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-07-25 20:36:08.297342495 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.309342559 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.309342559 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.321342622 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.321342622 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.321342622 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.341342726 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.341342726 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:08.341342726 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.341342726 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:08.349342767 +0200 +@@ -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-07-25 20:36:08.349342767 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.369342872 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + /* 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-07-25 20:36:08.369342872 +0200 +@@ -14,9 +14,8 @@ + Lesser General 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 . */ + + #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-07-25 20:36:08.369342872 +0200 +@@ -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 . */ + + #ifndef _BITS_LIBC_TSD_H + #define _BITS_LIBC_TSD_H 1 + + #include ++#ifdef __UCLIBC_HAS_TLS__ + #include + +-#if USE_TLS && HAVE___THREAD +- + /* When __thread works, the generic definition is what we want. */ + # include + +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-07-25 20:36:08.369342872 +0200 +@@ -19,6 +19,9 @@ + #ifndef _BITS_PTHREADTYPES_H + #define _BITS_PTHREADTYPES_H 1 + ++#define __need_size_t ++#include ++ + #define __need_schedparam + #include + +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-07-25 20:36:08.369342872 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _BITS_TYPES_H + # error "Never include directly; use 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-07-25 20:36:08.381342935 +0200 +@@ -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 ++ . */ + + #include + #include + #include + +-#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-07-25 20:36:08.381342935 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.381342935 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.381342935 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.381342935 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.381342935 +0200 +@@ -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 ++ . */ + + #include + #include + #include + #include + +-#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-07-25 20:36:08.381342935 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.381342935 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.381342935 +0200 +@@ -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 ++ . */ + + #include + #include + + /* 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-07-25 20:36:08.381342935 +0200 +@@ -14,9 +14,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.381342935 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.381342935 +0200 +@@ -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-07-25 20:36:08.381342935 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:08.381342935 +0200 +@@ -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-07-25 20:36:08.381342935 +0200 +@@ -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 ++ . */ + + #include + #include + #include + #include + +-#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-07-25 20:36:08.381342935 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:08.381342935 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.381342935 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.381342935 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.381342935 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.381342935 +0200 +@@ -14,9 +14,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.381342935 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.381342935 +0200 +@@ -14,9 +14,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.393342999 +0200 +@@ -14,9 +14,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.413343103 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.421343145 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.421343145 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.433343208 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.433343208 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.433343208 +0200 +@@ -2,7 +2,7 @@ + #include + + -- +-#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-07-25 20:36:08.433343208 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.457343333 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.457343333 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.469343397 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.485343481 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.485343481 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.485343481 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.501343564 +0200 +@@ -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 . */ + + #include + +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-07-25 20:36:08.501343564 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -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-07-25 20:36:08.529343711 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + /* 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-07-25 20:36:08.529343711 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _BITS_TYPES_H + # error "Never include directly; use 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-07-25 20:36:08.529343711 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:08.529343711 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.529343711 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + #include +@@ -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-07-25 20:36:08.537343753 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.537343753 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.537343753 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.537343753 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.537343753 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.561343879 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + /* 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-07-25 20:36:08.561343879 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:08.561343879 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:08.561343879 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.581343983 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:08.581343983 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.593344046 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + /* 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-07-25 20:36:08.605344109 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.605344109 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:08.605344109 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.605344109 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.605344109 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + #include +@@ -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-07-25 20:36:08.605344109 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:08.609344130 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.609344130 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.629344235 +0200 +@@ -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 ++ . */ + + #include + #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-07-25 20:36:08.641344298 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.641344298 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:08.641344298 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.657344381 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.657344381 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.673344465 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.673344465 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.689344549 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.689344549 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:08.689344549 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.705344633 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _BITS_TYPES_H + # error "Never include directly; use 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-07-25 20:36:08.721344717 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:08.721344717 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.721344717 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.737344801 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:08.737344801 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.737344801 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.741344821 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:08.741344821 +0200 +@@ -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 . */ + + 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-07-25 20:36:08.741344821 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:08.741344821 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.741344821 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.741344821 +0200 +@@ -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 . */ + + #include + +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-07-25 20:36:08.765344947 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + /* 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-07-25 20:36:08.765344947 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _BITS_TYPES_H + # error "Never include directly; use 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-07-25 20:36:08.765344947 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include_next + +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-07-25 20:36:08.785345052 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.785345052 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -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-07-25 20:36:08.801345136 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.801345136 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -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-07-25 20:36:08.801345136 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.825345261 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.825345261 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.825345261 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.825345261 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.825345261 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.825345261 +0200 +@@ -12,9 +12,8 @@ + # Lesser General Public License for more details. + + # You should have received a copy of the GNU Lesser General Public +-# License along with the GNU C Library; if not, 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 . + + # 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-07-25 20:36:08.825345261 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* The definitions in this file must correspond to those in the debugger. */ + #include +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-07-25 20:36:08.825345261 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.825345261 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.825345261 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.833345303 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:08.833345303 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:08.833345303 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.833345303 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.833345303 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.833345303 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.833345303 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.833345303 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.833345303 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "thread_dbP.h" + #include +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-07-25 20:36:08.833345303 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "thread_dbP.h" + #include +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-07-25 20:36:08.833345303 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.833345303 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.833345303 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.833345303 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:08.833345303 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "thread_dbP.h" + #include +@@ -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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "thread_dbP.h" + #include +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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.837345325 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "thread_dbP.h" + #include +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-07-25 20:36:08.837345325 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "thread_dbP.h" + #include +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-07-25 20:36:08.837345325 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.009340986 +0200 +@@ -14,8 +14,6 @@ + + /* Thread cancellation */ + +-#define __FORCE_GLIBC +-#include + #include + #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-07-25 20:36:08.009340986 +0200 +@@ -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-07-25 20:36:08.009340986 +0200 +@@ -14,8 +14,6 @@ + + /* Define the location of errno for the remainder of the C library */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #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-07-25 20:36:08.009340986 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:08.009340986 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:08.013341008 +0200 +@@ -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 +-#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 + +-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-07-25 20:36:08.013341008 +0200 +@@ -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 ++ . */ + +-#include + #include +-#include + #include +- +-/* see comment in forward.c */ +-#define GCC_RENAME_BUG 1 +-#ifdef GCC_RENAME_BUG +-# include +-# include +-# include +-# include +-# include +-#endif +- +-#include "internals.h" +-#include "sysdeps/pthread/pthread-functions.h" ++#include + + + 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-07-25 20:36:08.013341008 +0200 +@@ -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 ++ * . + */ + + #include +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-07-25 20:36:08.013341008 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.009340986 +0200 +@@ -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-07-25 20:36:08.013341008 +0200 +@@ -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 +-#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-07-25 20:36:08.013341008 +0200 +@@ -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-07-25 20:36:08.013341008 +0200 +@@ -14,8 +14,6 @@ + + /* Thread creation, initialization, and basic low-level routines */ + +-#define __FORCE_GLIBC +-#include + #include + #include /* for h_errno */ + #include +@@ -38,8 +36,6 @@ + #include + #include + +-/* 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-07-25 20:36:08.013341008 +0200 +@@ -19,11 +19,7 @@ + #include "pthread.h" + #include "internals.h" + #include +- +-/* 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 + + 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-07-25 20:36:08.013341008 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.013341008 +0200 +@@ -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 . */ + + #include + #include +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-07-25 20:36:08.013341008 +0200 +@@ -15,6 +15,7 @@ + /* Semaphores a la POSIX 1003.1b */ + + #include ++#include + #include + #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-07-25 20:36:08.013341008 +0200 +@@ -17,6 +17,7 @@ + + #include + #include ++#include + #ifdef __USE_XOPEN2K + # define __need_timespec + # include +@@ -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-07-25 20:36:08.013341008 +0200 +@@ -22,9 +22,6 @@ + #include "spinlock.h" + #include + +-/* 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-07-25 20:36:08.013341008 +0200 +@@ -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-07-25 20:36:08.013341008 +0200 +@@ -14,8 +14,6 @@ + + /* Internal locks */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #include +@@ -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-07-25 20:36:08.025341071 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.025341071 +0200 +@@ -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 ++ ++#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-07-25 20:36:08.025341071 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.029341091 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.029341091 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.029341091 +0200 +@@ -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 . */ + #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-07-25 20:36:08.029341091 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.029341091 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.029341091 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.029341091 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.029341091 +0200 +@@ -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 . */ + + #ifndef __ASSEMBLER__ + #include /* 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-07-25 20:36:08.029341091 +0200 +@@ -14,9 +14,8 @@ + Lesser General 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 . */ + + #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-07-25 20:36:08.029341091 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.029341091 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.029341091 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.029341091 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.029341091 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.029341091 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:08.029341091 +0200 +@@ -14,9 +14,8 @@ + Lesser General 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 . */ + + #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-07-25 20:36:08.029341091 +0200 +@@ -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 . */ + + #ifndef _BITS_LIBC_TSD_H + #define _BITS_LIBC_TSD_H 1 + +-#include +- + /* 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 +-#include +- ++#include + #include + +-#if defined(USE_TLS) && USE_TLS && HAVE___THREAD ++#ifdef __UCLIBC_HAS_TLS__ ++#include + + /* When __thread works, the generic definition is what we want. */ + # include +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-07-25 20:36:08.029341091 +0200 +@@ -19,6 +19,9 @@ + #ifndef _BITS_PTHREADTYPES_H + #define _BITS_PTHREADTYPES_H 1 + ++#define __need_size_t ++#include ++ + #define __need_schedparam + #include + +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-07-25 20:36:08.041341155 +0200 +@@ -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 ++ . */ + + #include + #include + + /* 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-07-25 20:36:08.041341155 +0200 +@@ -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 ++ . */ + + #ifndef _PTHREAD_FUNCTIONS_H + #define _PTHREAD_FUNCTIONS_H 1 + + #include ++#if 0 + #include + #include + + 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-07-25 20:36:08.041341155 +0200 +@@ -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-07-25 20:36:08.041341155 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:08.041341155 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.041341155 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.041341155 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.041341155 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.065341280 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.073341322 +0200 +@@ -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 . */ + + #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-07-25 20:36:08.109341510 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.109341510 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.129341616 +0200 +@@ -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 ++ . */ + + #ifndef _PT_MACHINE_H + #define _PT_MACHINE_H 1 +@@ -26,19 +25,51 @@ + #include + + #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-07-25 20:36:08.129341616 +0200 +@@ -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 , 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 . */ + +-#define __FORCE_GLIBC +-#include + #include + #include + #include +@@ -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 + # 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 + 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-07-25 20:36:08.149341720 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* The definitions in this file must correspond to those in the debugger. */ + #include +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-07-25 20:36:08.149341720 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.149341720 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.149341720 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.153341741 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "thread_dbP.h" + #include +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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "thread_dbP.h" + #include +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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.153341741 +0200 +@@ -2,8 +2,6 @@ + #ifndef _THREAD_DBP_H + #define _THREAD_DBP_H 1 + +-#define __FORCE_GLIBC +-#include + #include + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.865345471 +0200 +@@ -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 ++ . */ + + #include + +- ++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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + /* 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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.853345408 +0200 +@@ -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-07-25 20:36:08.865345471 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -35,7 +34,6 @@ + #include + #include + #include +-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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.865345471 +0200 +@@ -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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -23,7 +22,7 @@ + #include + + 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-07-25 20:36:08.865345471 +0200 +@@ -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 ++ . */ + + #include "pthreadP.h" + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -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 . */ + + #include + #include + #include +-#include + #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-07-25 20:36:08.865345471 +0200 +@@ -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 . */ + + #include + #include + #include +-#include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.865345471 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -25,7 +24,6 @@ + #include + #include + #include +-#include + #include + #include + +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.869345492 +0200 +@@ -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 ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -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 ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -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 ++ . */ + +-#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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:08.869345492 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:08.869345492 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "pthreadP.h" + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "pthreadP.h" + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.865345471 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -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 ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -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 ++ . */ + + #include + #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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.869345492 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.893345617 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + /* 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-07-25 20:36:08.905345680 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:08.905345680 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:08.905345680 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.893345617 +0200 +@@ -12,9 +12,8 @@ + # Lesser General Public License for more details. + # + # You should have received a copy of the GNU Lesser General Public +-# License along with the GNU C Library; if not, 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 . + + 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-07-25 20:36:08.905345680 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:08.905345680 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + .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-07-25 20:36:08.905345680 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + #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-07-25 20:36:08.905345680 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.921345764 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + /* 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-07-25 20:36:08.921345764 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:08.921345764 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.921345764 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:08.921345764 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:08.921345764 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #define _ERRNO_H 1 + #include +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-07-25 20:36:08.921345764 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.937345847 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.937345847 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:08.937345847 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:08.953345931 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + /* 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-07-25 20:36:08.969346015 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:08.989346120 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:08.997346163 +0200 +@@ -13,9 +13,8 @@ + # Lesser General Public License for more details. + + # You should have received a copy of the GNU Lesser General Public +-# License along with the GNU C Library; if not, 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 . + + 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-07-25 20:36:08.997346163 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.997346163 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.997346163 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:08.953345931 +0200 +@@ -12,9 +12,8 @@ + # Lesser General Public License for more details. + + # You should have received a copy of the GNU Lesser General Public +-# License along with the GNU C Library; if not, 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 . + + 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-07-25 20:36:08.997346163 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:08.997346163 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:08.997346163 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.997346163 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + .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-07-25 20:36:09.001346183 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:08.869345492 +0200 +@@ -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-07-25 20:36:09.017346267 +0200 +@@ -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-07-25 20:36:09.017346267 +0200 +@@ -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 , 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 ++#include ++#include ++ ++/* 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-07-25 20:36:09.017346267 +0200 +@@ -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 ++ * ++ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. ++ * ++ */ ++ ++#include ++#include ++ ++#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-07-25 20:36:09.017346267 +0200 +@@ -0,0 +1,17 @@ ++# Makefile for uClibc NPTL ++# ++# Copyright (C) 2005 Steven J. Hill ++# ++# 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-07-25 20:36:09.017346267 +0200 +@@ -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-07-25 20:36:09.017346267 +0200 +@@ -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 ++ ++/* 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-07-25 20:36:09.017346267 +0200 +@@ -0,0 +1,20 @@ ++/* Copyright (C) 2002 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Ulrich Drepper , 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-07-25 20:36:09.017346267 +0200 +@@ -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-07-25 20:36:09.017346267 +0200 +@@ -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 ++ ++ .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-07-25 20:36:09.017346267 +0200 +@@ -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-07-25 20:36:09.017346267 +0200 +@@ -0,0 +1,15 @@ ++#include ++#include ++ ++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-07-25 20:36:09.017346267 +0200 +@@ -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 ++# include ++# include ++# include ++# include ++# include ++# include ++ ++/* 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 ++#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 ++ ++/* 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 ++ ++/* 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-07-25 20:36:09.033346351 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + /* 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-07-25 20:36:09.033346351 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.033346351 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.033346351 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.033346351 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.033346351 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.033346351 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.033346351 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.045346414 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + /* 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-07-25 20:36:09.045346414 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.045346414 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.045346414 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.045346414 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.045346414 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.061346497 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.061346497 +0200 +@@ -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-07-25 20:36:09.081346603 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.081346603 +0200 +@@ -14,9 +14,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "pthreadP.h" + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.081346603 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.081346603 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "pthreadP.h" + #include +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-07-25 20:36:09.081346603 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:09.081346603 +0200 +@@ -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 ++ . */ + + #include + #include + #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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -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 ++ . */ ++ ++#include ++ ++#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-07-25 20:36:09.081346603 +0200 +@@ -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 ++ . */ ++ ++#include ++#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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.081346603 +0200 +@@ -14,9 +14,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.085346623 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.085346623 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.085346623 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +@@ -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-07-25 20:36:09.085346623 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +@@ -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-07-25 20:36:09.109346749 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + /* 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-07-25 20:36:09.109346749 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.109346749 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:09.109346749 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:09.109346749 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.109346749 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:09.109346749 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + .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-07-25 20:36:09.113346770 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.121346811 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + /* 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-07-25 20:36:09.133346875 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.133346875 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.133346875 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.133346875 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.133346875 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.133346875 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.133346875 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.133346875 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.133346875 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.133346875 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "pthreadP.h" + #include +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-07-25 20:36:09.133346875 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.133346875 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:09.133346875 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.133346875 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SEMAPHORE_H + # error "Never use directly; include 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-07-25 20:36:09.133346875 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.133346875 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.133346875 +0200 +@@ -12,9 +12,8 @@ + Lesser 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 . */ + + #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-07-25 20:36:09.133346875 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "pthreadP.h" + #include +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-07-25 20:36:09.133346875 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.133346875 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.137346895 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.137346895 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.137346895 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SEMAPHORE_H + # error "Never use directly; include 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-07-25 20:36:09.137346895 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.137346895 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.137346895 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.137346895 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.137346895 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.137346895 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "pthreadP.h" + #include +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-07-25 20:36:09.137346895 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +@@ -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-07-25 20:36:09.137346895 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.137346895 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.137346895 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.137346895 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:09.137346895 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + /* 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-07-25 20:36:09.137346895 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #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-07-25 20:36:09.137346895 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.137346895 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:09.137346895 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.137346895 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:09.137346895 +0200 +@@ -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 ++ . */ + + #include + #include + #include + ++#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-07-25 20:36:09.137346895 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.137346895 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SEMAPHORE_H + # error "Never use directly; include 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-07-25 20:36:09.137346895 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.137346895 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.137346895 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.137346895 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -23,6 +22,7 @@ + #include + #include + #include ++#include + + + .text +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.141346917 +0200 +@@ -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 . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.141346917 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:09.141346917 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.145346937 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.145346937 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.133346875 +0200 +@@ -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-07-25 20:36:09.145346937 +0200 +@@ -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 ++ ++#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-07-25 20:36:09.145346937 +0200 +@@ -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 directly; include 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-07-25 20:36:09.145346937 +0200 +@@ -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 ++#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-07-25 20:36:09.145346937 +0200 +@@ -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 +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-07-25 20:36:09.145346937 +0200 +@@ -0,0 +1,31 @@ ++/* Copyright (C) 2005 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Phil Blundell , 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 ++#include ++#include ++#include ++ ++ ++#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-07-25 20:36:09.145346937 +0200 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2003 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Paul Mackerras , 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-07-25 20:36:09.145346937 +0200 +@@ -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 ++#include ++#include ++#include ++#include ++ ++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-07-25 20:36:09.145346937 +0200 +@@ -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 ++#include ++#include ++#include ++#include ++#include ++ ++#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-07-25 20:36:09.145346937 +0200 +@@ -0,0 +1,13 @@ ++# Makefile for uClibc NPTL ++# ++# Copyright (C) 2005 Steven J. Hill ++# ++# 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-07-25 20:36:09.145346937 +0200 +@@ -0,0 +1,31 @@ ++# Makefile for uClibc NPTL ++# ++# Copyright (C) 2006 Steven J. Hill ++# ++# 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-07-25 20:36:09.145346937 +0200 +@@ -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 ++#include ++ ++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-07-25 20:36:09.145346937 +0200 +@@ -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 ++ ++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-07-25 20:36:09.145346937 +0200 +@@ -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-07-25 20:36:09.145346937 +0200 +@@ -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-07-25 20:36:09.145346937 +0200 +@@ -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 ++#include ++ ++#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-07-25 20:36:09.145346937 +0200 +@@ -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 ++#include ++#ifndef __ASSEMBLER__ ++# include ++#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-07-25 20:36:09.145346937 +0200 +@@ -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 ++#include ++ ++#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-07-25 20:36:09.145346937 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.145346937 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SEMAPHORE_H + # error "Never use directly; include 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-07-25 20:36:09.145346937 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.145346937 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _LOWLEVELLOCK_H + #define _LOWLEVELLOCK_H 1 +@@ -81,7 +80,7 @@ + #define lll_futex_timed_wait(futexp, val, timespec, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ +- long int __ret; \ ++ long int __ret attribute_unused; \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, (long) (futexp), \ + __lll_private_flag (FUTEX_WAIT, private), \ + (val), (timespec)); \ +@@ -91,7 +90,7 @@ + #define lll_futex_wake(futexp, nr, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ +- long int __ret; \ ++ long int __ret attribute_unused; \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, (long) (futexp), \ + __lll_private_flag (FUTEX_WAKE, private), \ + (nr), 0); \ +@@ -111,7 +110,7 @@ + #define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ +- long int __ret; \ ++ long int __ret attribute_unused; \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (long) (futexp), \ + __lll_private_flag (FUTEX_CMP_REQUEUE, private),\ + (nr_wake), (nr_move), (mutex), (val)); \ +@@ -122,7 +121,7 @@ + #define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ +- long int __ret; \ ++ long int __ret attribute_unused; \ + \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_WAKE_OP, private), \ +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-07-25 20:36:09.149346959 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "pthreadP.h" + #include +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-07-25 20:36:09.149346959 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.149346959 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.149346959 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.149346959 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.149346959 +0200 +@@ -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 ++ . */ + + #include + #include + + /* 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-07-25 20:36:09.149346959 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.149346959 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SEMAPHORE_H + # error "Never use directly; include 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-07-25 20:36:09.149346959 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.149346959 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.149346959 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.149346959 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #include + #include +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-07-25 20:36:09.149346959 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.149346959 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.149346959 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received 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 ++ . */ + + #include + #include +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-07-25 20:36:09.161347021 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.161347021 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "pthreadP.h" + #include +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-07-25 20:36:09.161347021 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "pthreadP.h" + #include +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-07-25 20:36:09.161347021 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.161347021 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -25,7 +24,7 @@ + #include + + 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-07-25 20:36:09.161347021 +0200 +@@ -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 ++ . */ + + #include + +-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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.169347063 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -26,7 +25,7 @@ + #include + + 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-07-25 20:36:09.173347084 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.173347084 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.173347084 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SEMAPHORE_H + # error "Never use directly; include 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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.173347084 +0200 +@@ -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 . */ + + 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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.173347084 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:09.173347084 +0200 +@@ -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 . */ + + /* 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-07-25 20:36:09.173347084 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.173347084 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SEMAPHORE_H + # error "Never use directly; include 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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.173347084 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.177347105 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.177347105 +0200 +@@ -14,9 +14,8 @@ + Lesser 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 . */ + + #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-07-25 20:36:09.177347105 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.177347105 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.177347105 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "pthreadP.h" + #include +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-07-25 20:36:09.177347105 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.177347105 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.177347105 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.177347105 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -25,7 +24,7 @@ + #include + + 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-07-25 20:36:09.177347105 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.177347105 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.177347105 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.177347105 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.177347105 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.193347189 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.193347189 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.193347189 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.193347189 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.193347189 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.193347189 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.193347189 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.193347189 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +@@ -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-07-25 20:36:09.193347189 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.193347189 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.221347335 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.221347335 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #ifndef _SEMAPHORE_H + # error "Never use directly; include 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-07-25 20:36:09.221347335 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.221347335 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:09.221347335 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.221347335 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.221347335 +0200 +@@ -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 ++ . */ + + #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-07-25 20:36:09.221347335 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.221347335 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.221347335 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.221347335 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.221347335 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.221347335 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.221347335 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.221347335 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.221347335 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.225347357 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.225347357 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.225347357 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.225347357 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.225347357 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.225347357 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.221347335 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:09.225347357 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.225347357 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.225347357 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.225347357 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.225347357 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.225347357 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.237347419 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + + /* 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-07-25 20:36:09.237347419 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.237347419 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:09.237347419 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:09.237347419 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + .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-07-25 20:36:09.237347419 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.237347419 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:09.237347419 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.237347419 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.381348174 +0200 +@@ -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 ++ . */ + + #include "thread_dbP.h" + #include +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-07-25 20:36:09.381348174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "thread_dbP.h" + #include +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-07-25 20:36:09.381348174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* The definitions in this file must correspond to those in the debugger. */ + #include +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-07-25 20:36:09.381348174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "thread_dbP.h" + #include +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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "thread_dbP.h" + #include +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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "thread_dbP.h" + #include +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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.381348174 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.385348195 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.385348195 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.385348195 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.385348195 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.385348195 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #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-07-25 20:36:09.385348195 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.385348195 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include "thread_dbP.h" + #include +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-07-25 20:36:09.385348195 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.385348195 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:09.605349347 +0200 +@@ -7,8 +7,6 @@ + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +-#include +- + 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-07-25 20:36:09.605349347 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.605349347 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -186,7 +185,6 @@ + #include + #include + #include +-#include + #include + + +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-07-25 20:36:09.605349347 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.605349347 +0200 +@@ -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-07-25 20:36:09.605349347 +0200 +@@ -10,13 +10,18 @@ + #include + + #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-07-25 20:36:09.605349347 +0200 +@@ -10,13 +10,17 @@ + #include + + #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-07-25 20:36:09.605349347 +0200 +@@ -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-07-25 20:36:09.605349347 +0200 +@@ -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-07-25 20:36:09.605349347 +0200 +@@ -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 ++ . */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++#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-07-25 20:36:09.605349347 +0200 +@@ -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 ++ . */ ++ ++#include ++#include ++#include ++ ++#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-07-25 20:36:09.605349347 +0200 +@@ -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 ++ . */ ++ ++#include ++#include ++#include ++ ++#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-07-25 20:36:09.605349347 +0200 +@@ -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 ++ . */ ++ ++#include ++#include ++#include ++ ++#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-07-25 20:36:09.605349347 +0200 +@@ -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 ++ . */ ++ ++#include ++#include ++#include ++#include ++ ++#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-07-25 20:36:09.605349347 +0200 +@@ -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-07-25 20:36:09.605349347 +0200 +@@ -2,6 +2,7 @@ + * timer_create.c - create a per-process timer. + */ + ++#include + #include + #include + #include +@@ -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-07-25 20:36:09.949351149 +0200 +@@ -12,6 +12,7 @@ + * + */ + ++#include + #include + #include + #include +@@ -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-07-25 20:36:09.829350520 +0200 +@@ -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-07-25 20:36:09.949351149 +0200 +@@ -20,6 +20,7 @@ + * + */ + ++#include + #include + #include + #include +@@ -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-07-25 20:36:09.949351149 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, 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 . + + 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-07-25 20:36:09.949351149 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, 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 . + + 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-07-25 20:36:09.829350520 +0200 +@@ -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-07-25 20:36:09.949351149 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.949351149 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:09.949351149 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:04.409322131 +0200 +@@ -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-07-25 20:36:04.409322131 +0200 +@@ -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,21 +225,34 @@ + # 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 \ + bits/sigcontextinfo.h \ + bits/stackinfo.h \ ++ atomic.h \ ++ bits/atomic.h \ + tls.h \ + rpc/des_crypt.h \ + rpc/key_prot.h \ +@@ -259,18 +287,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 +321,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 +338,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 +383,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 +454,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 +522,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 +537,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-07-25 20:36:04.409322131 +0200 +@@ -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 " >> $@.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-07-25 20:36:04.409322131 +0200 +@@ -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-07-25 20:36:10.365353328 +0200 +@@ -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-07-25 20:36:10.925356263 +0200 +@@ -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-07-25 20:36:11.325358357 +0200 +@@ -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-07-25 20:36:11.377358630 +0200 +@@ -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-07-25 20:36:11.385358673 +0200 +@@ -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-07-25 20:36:11.405358777 +0200 +@@ -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-07-25 20:36:11.417358839 +0200 +@@ -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-07-25 20:36:11.417358839 +0200 +@@ -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-07-25 20:36:11.417358839 +0200 +@@ -0,0 +1,30 @@ ++#include ++#include ++#include ++ ++#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-07-25 20:36:11.417358839 +0200 +@@ -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-07-25 20:36:11.417358839 +0200 +@@ -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-07-25 20:36:11.417358839 +0200 +@@ -0,0 +1,29 @@ ++#include ++#include ++#include ++ ++#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-07-25 20:36:09.949351149 +0200 +@@ -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-07-25 20:36:11.433358924 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.433358924 +0200 +@@ -1,6 +1,6 @@ + #include + #include + 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-07-25 20:36:11.433358924 +0200 +@@ -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-07-25 20:36:11.433358924 +0200 +@@ -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-07-25 20:36:11.433358924 +0200 +@@ -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-07-25 20:36:11.433358924 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.433358924 +0200 +@@ -0,0 +1,44 @@ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++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-07-25 20:36:11.433358924 +0200 +@@ -0,0 +1,53 @@ ++/* vi: set sw=4 ts=4 sts=4: */ ++/* ++ * Nonblocking socket test for uClibc ++ * Copyright (C) 2012 by Kevin Cernekee ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++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-07-25 20:36:11.449359008 +0200 +@@ -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-07-25 20:36:11.489359217 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:11.489359217 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:11.485359196 +0200 +@@ -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-07-25 20:36:11.489359217 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -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 . + + + # 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-07-25 20:36:11.489359217 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.489359217 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.469359112 +0200 +@@ -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-07-25 20:36:10.745355319 +0200 +@@ -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-07-25 20:36:11.501359280 +0200 +@@ -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-07-25 20:36:11.501359280 +0200 +@@ -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-07-25 20:36:11.505359301 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.505359301 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.505359301 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.505359301 +0200 +@@ -1,4 +1,8 @@ +-/* Test case by Alexandre Duret-Lutz . */ ++/* Test case by Alexandre Duret-Lutz . ++ * test_obstack_printf() added by Anthony G. Basile . ++ */ ++ ++#include + #include + #include + #include +@@ -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-07-25 20:36:11.517359363 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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 \ + 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-07-25 20:36:11.517359363 +0200 +@@ -14,9 +14,8 @@ + # Lesser General Public License for more details. + + # You should have received a copy of the GNU Lesser General Public +-# License along with the GNU C Library; if not, 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 . + + # 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-07-25 20:36:11.517359363 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* Part of testsuite for libm. + +diff -Nur uClibc-0.9.33.2/test/math/libm-test-ulps-arm uClibc-git/test/math/libm-test-ulps-arm +--- uClibc-0.9.33.2/test/math/libm-test-ulps-arm 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-git/test/math/libm-test-ulps-arm 2014-07-25 20:36:11.517359363 +0200 +@@ -0,0 +1,4981 @@ ++# Begin of automatic generation ++ ++# acos_downward ++Test "acos_downward (-0)": ++float: 1 ++ifloat: 1 ++Test "acos_downward (-0.5)": ++double: 1 ++idouble: 1 ++Test "acos_downward (-1)": ++float: 1 ++ifloat: 1 ++Test "acos_downward (0)": ++float: 1 ++ifloat: 1 ++Test "acos_downward (0.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++# acos_towardzero ++Test "acos_towardzero (-0)": ++float: 1 ++ifloat: 1 ++Test "acos_towardzero (-0.5)": ++double: 1 ++idouble: 1 ++Test "acos_towardzero (-1)": ++float: 1 ++ifloat: 1 ++Test "acos_towardzero (0)": ++float: 1 ++ifloat: 1 ++Test "acos_towardzero (0.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++# asin_downward ++Test "asin_downward (-0.5)": ++double: 1 ++idouble: 1 ++Test "asin_downward (0.5)": ++double: 1 ++idouble: 1 ++Test "asin_downward (1.0)": ++float: 1 ++ifloat: 1 ++ ++# asin_towardzero ++Test "asin_towardzero (-0.5)": ++double: 1 ++idouble: 1 ++Test "asin_towardzero (-1.0)": ++float: 1 ++ifloat: 1 ++Test "asin_towardzero (0.5)": ++double: 1 ++idouble: 1 ++Test "asin_towardzero (1.0)": ++float: 1 ++ifloat: 1 ++ ++# asin_upward ++Test "asin_upward (-1.0)": ++float: 1 ++ifloat: 1 ++ ++# atan2 ++Test "atan2 (-0.75, -1.0)": ++float: 1 ++ifloat: 1 ++Test "atan2 (-max_value, -min_value)": ++float: 1 ++ifloat: 1 ++Test "atan2 (0.75, -1.0)": ++float: 1 ++ifloat: 1 ++Test "atan2 (1.390625, 0.9296875)": ++float: 1 ++ifloat: 1 ++ ++# atanh ++Test "atanh (0.75)": ++float: 1 ++ifloat: 1 ++ ++# cacos ++Test "Imaginary part of: cacos (+0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (+0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (+0 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (+0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (+0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (+0 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0.25 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0.25 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (-0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (-0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1.fp-100 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-100 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0x0.ffffffp0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 1.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0x0.ffffffp0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 1.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1.fp-30 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-30 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 + 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 - 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 + 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 - 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-23 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1p-23 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-23 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-23 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1p-23 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-23 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 + 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 - 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 + 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 - 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-1.0 + 0x1p50 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-1.0 - 0x1p50 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0.5 + +0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1p-63 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1p-63 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0x0.ffffffp0 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0x0.ffffffp0 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacos (0x0.ffffffp0 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0x0.ffffffp0 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacos (0x1.0000000000001p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0x1.0000000000001p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0x1.000002p0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0x1.000002p0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (1.0 + 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (1.0 + 0x1.fp-10 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (1.0 - 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (1.0 - 0x1.fp-10 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ ++# cacosh ++Test "Real part of: cacosh (+0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (+0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (+0 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (+0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (+0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (+0 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0.25 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0.25 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacosh (-0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacosh (-0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-100 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-100 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x0.ffffffp0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 1.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x0.ffffffp0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 1.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-30 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-30 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 + 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 - 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 + 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 - 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 + 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 - 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 + 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 - 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-1.0 + 0x1p50 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-1.0 - 0x1p50 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0.5 + +0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1p-63 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0.5 - 0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1p-63 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacosh (0x1.0000000000001p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0x1.0000000000001p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0x1.000002p0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacosh (0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0x1.000002p0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacosh (0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (1.0 + 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (1.0 + 0x1.fp-10 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacosh (1.0 - 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (1.0 - 0x1.fp-10 i)": ++float: 2 ++ifloat: 2 ++ ++# casin ++Test "Imaginary part of: casin (+0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (+0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (+0 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (+0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (+0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (+0 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: casin (-0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: casin (-0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (-0x1.fp-10 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-0x1.fp-10 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (-0x1p-23 + 0.5 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-0x1p-23 + 0x1.000002p0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casin (-0x1p-23 - 0.5 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-0x1p-23 - 0x1.000002p0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (-1.0 + 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (-1.0 - 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: casin (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: casin (0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (0x1.fp-10 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (0x1.fp-10 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (0x1p-23 + 0.5 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (0x1p-23 + 0x1.000002p0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casin (0x1p-23 - 0.5 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (0x1p-23 - 0x1.000002p0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (1.0 + 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (1.0 - 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ ++# casinh ++Test "Imaginary part of: casinh (-0.25 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (-0.25 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0.5 + +0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (-0.5 + 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (-0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (-0.5 - 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (-0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0x0.ffffffp0 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x0.ffffffp0 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (-0x1.000002p0 + 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (-0x1.000002p0 - 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0x1.fp-10 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0x1.fp-10 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0x1.fp-129 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1.fp-129 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-105 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-105 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-112 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-112 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-23 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-23 + 0x0.ffffffp0 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: casinh (-0x1p-23 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0x1p-23 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-23 - 0x0.ffffffp0 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: casinh (-0x1p-23 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0x1p-52 + 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-52 - 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.0 + +0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 + 0.25 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (-1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-100 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-129 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-30 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 - 0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 - 0.25 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (-1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-100 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-129 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-30 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.5 + +0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.5 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.5 - 0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.5 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (0.25 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (0.25 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0.5 + +0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (0.5 + 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (0.5 - 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (0x0.ffffffp0 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x0.ffffffp0 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (0x1.000002p0 + 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (0x1.000002p0 - 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (0x1.fp-10 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0x1.fp-10 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0x1.fp-129 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1.fp-129 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-105 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-105 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-112 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-112 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-23 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-23 + 0x0.ffffffp0 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: casinh (0x1p-23 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0x1p-23 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-23 - 0x0.ffffffp0 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: casinh (0x1p-23 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0x1p-52 + 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-52 - 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.0 + +0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 + 0.25 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-100 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-129 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-30 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 - 0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 - 0.25 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-100 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-129 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-30 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.5 + +0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.5 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.5 - 0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.5 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++ ++# catan ++Test "Imaginary part of: catan (-0x0.fffffffffffff8p0 + 0x1p-27 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x0.ffffffp0 + 0x1p-13 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1.0000000000001p0 - 0x1p-27 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catan (-0x1.000002p0 + 0x1p-126 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1.000002p0 - 0x1p-126 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1.000002p0 - 0x1p-13 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1.fp1023 - 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1.fp127 - 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1p-1020 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1p-1020 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catan (-0x1p-13 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1p-13 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1p-13 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-54 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-54 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-57 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-57 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-1.0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-1.0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-2 - 3 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x0.fffffffffffff8p0 + 0x1p-27 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x0.ffffffp0 + 0x1p-13 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1.0000000000001p0 - 0x1p-27 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catan (0x1.000002p0 + 0x1p-126 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1.000002p0 - 0x1p-126 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1.000002p0 - 0x1p-13 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1.fp1023 - 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1.fp127 - 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1p-1020 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1p-1020 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catan (0x1p-13 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1p-13 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1p-13 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-54 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-54 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-57 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-57 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (1.0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (1.0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++ ++# catanh ++Test "Real part of: catanh (-0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (-0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (-0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-0x1.fp1023 - 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-0x1.fp127 - 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (-0x1p-126 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (-0x1p-126 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-0x1p-13 + 0x1.000002p0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (-0x1p-13 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (-0x1p-13 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-0x1p-13 - 0x1.000002p0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (-0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (-0x1p-13 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-0x1p-27 + 0x1.0000000000001p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-0x1p-27 - 0x1.0000000000001p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-1.0 + 0x1p-1020 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (-1.0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 + 0x1p-54 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 + 0x1p-57 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 - 0x1p-1020 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (-1.0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 - 0x1p-54 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 - 0x1p-57 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-2 - 3 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (0x1.fp1023 - 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (0x1.fp127 - 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (0x1p-126 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1p-126 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (0x1p-13 + 0x0.ffffffp0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1p-13 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1p-13 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (0x1p-13 - 0x0.ffffffp0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1p-13 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (0x1p-27 + 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (0x1p-27 - 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (1.0 + 0x1p-1020 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (1.0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 + 0x1p-54 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 + 0x1p-57 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 - 0x1p-1020 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (1.0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 - 0x1p-54 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 - 0x1p-57 i)": ++float: 1 ++ifloat: 1 ++ ++# cbrt ++Test "cbrt (-27.0)": ++double: 1 ++idouble: 1 ++Test "cbrt (0.75)": ++double: 1 ++idouble: 1 ++Test "cbrt (0.9921875)": ++double: 1 ++idouble: 1 ++ ++# ccos ++Test "Imaginary part of: ccos (-0.75 + 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccos (-0.75 + 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (-0.75 - 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccos (-0.75 - 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: ccos (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (0.75 + 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccos (0.75 + 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (0.75 - 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccos (0.75 - 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (0x1p-1074 + 1440 i)": ++double: 1 ++idouble: 1 ++ ++# ccosh ++Test "Real part of: ccosh (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (-710.5 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccosh (-710.5 - 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccosh (-89.5 + 0.75 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (-89.5 - 0.75 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: ccosh (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccosh (710.5 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccosh (710.5 - 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccosh (89.5 + 0.75 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (89.5 - 0.75 i)": ++float: 1 ++ifloat: 1 ++ ++# cexp ++Test "Imaginary part of: cexp (-2.0 - 3.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cexp (-95 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cexp (1440 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (50 + 0x1p127 i)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "Imaginary part of: cexp (50 + 0x1p127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (500 + 0x1p1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (709.8125 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cexp (709.8125 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (88.75 + 0.75 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cexp (88.75 + 0.75 i)": ++float: 2 ++ifloat: 2 ++ ++# clog ++Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1.fp+127 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1.fp+127 - 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1p-149 + 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog (-0x1p-149 + 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1p-149 - 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1.fp+127 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog (0x1p-147 + 0x1p-147 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1p-149 + 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog (0x2818p-15 + 0x798fp-15 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (1.0 + 0x1.234566p-10 i)": ++float: 1 ++ifloat: 1 ++ ++# clog10 ++Test "Imaginary part of: clog10 (-0 + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-0 - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)": ++double: 2 ++idouble: 2 ++Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i)": ++double: 2 ++idouble: 2 ++Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+1023 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+1023 - 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+127 + 0x1p-149 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+127 - 0x1p-149 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-0x1p-1074 + 0x1.fp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1p-1074 - 0x1.fp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1p-149 + 0x1.fp+127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1p-149 - 0x1.fp+127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-1.0 + 0x1.234566p-20 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-2 - 3 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-3 + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-3 - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf + 0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf + 1 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf + inf i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-inf - 0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf - 1 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0 + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0 - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x0.fffffffffffff8p0 + 0x0.fffffffffffff8p-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x0.ffffffp0 + 0x0.ffffffp-100 i)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-10 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-10 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-100 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.234566p-30 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.234566p-60 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x164c74eea876p-45 + 0x16f393482f77p-45 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1a6p-10 + 0x3a5p-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1073 + 0x1p-1073 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1074 + 0x1.fp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1074 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1074 - 0x1.fp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-149 + 0x1.fp+127 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-149 - 0x1.fp+127 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-509 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-510 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-511 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-61 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-62 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-63 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x2818p-15 + 0x798fp-15 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x2818p-15 + 0x798fp-15 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x2dd46725bp-35 + 0x7783a1284p-35 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x9b57bp-20 + 0xcb7b4p-20 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0xf2p-10 + 0x3e3p-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0xf2p-10 + 0x3e3p-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (3 + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (3 - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (inf + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (inf - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++# cos ++Test "cos (0x1p+120)": ++float: 1 ++ifloat: 1 ++Test "cos (0x1p+127)": ++float: 1 ++ifloat: 1 ++Test "cos (M_PI_6l * 2.0) == 0.5": ++double: 1 ++idouble: 1 ++ifloat: 1 ++Test "cos (M_PI_6l * 4.0) == -0.5": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++# cos_downward ++Test "cos_downward (1)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (2)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (3)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (4)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (5)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (7)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (8)": ++float: 1 ++ifloat: 1 ++ ++# cos_tonearest ++Test "cos_tonearest (7)": ++float: 1 ++ifloat: 1 ++ ++# cos_towardzero ++Test "cos_towardzero (2)": ++float: 1 ++ifloat: 1 ++Test "cos_towardzero (3)": ++float: 1 ++ifloat: 1 ++Test "cos_towardzero (5)": ++float: 1 ++ifloat: 1 ++Test "cos_towardzero (7)": ++float: 1 ++ifloat: 1 ++Test "cos_towardzero (8)": ++float: 1 ++ifloat: 1 ++ ++# cos_upward ++Test "cos_upward (10)": ++float: 1 ++ifloat: 1 ++Test "cos_upward (6)": ++float: 1 ++ifloat: 1 ++Test "cos_upward (7)": ++float: 1 ++ifloat: 1 ++Test "cos_upward (9)": ++float: 2 ++ifloat: 2 ++ ++# cosh_downward ++Test "cosh_downward (22)": ++float: 1 ++ifloat: 1 ++Test "cosh_downward (23)": ++float: 1 ++ifloat: 1 ++Test "cosh_downward (24)": ++float: 1 ++ifloat: 1 ++ ++# cosh_towardzero ++Test "cosh_towardzero (22)": ++float: 1 ++ifloat: 1 ++Test "cosh_towardzero (23)": ++float: 1 ++ifloat: 1 ++Test "cosh_towardzero (24)": ++float: 1 ++ifloat: 1 ++ ++# cpow ++Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i)": ++double: 1 ++float: 4 ++idouble: 1 ++ifloat: 4 ++Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i)": ++double: 2 ++float: 3 ++idouble: 2 ++ifloat: 3 ++Test "Real part of: cpow (2 + 3 i, 4 + 0 i)": ++double: 1 ++float: 4 ++idouble: 1 ++ifloat: 4 ++Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i)": ++float: 2 ++ifloat: 2 ++ ++# csin ++Test "Real part of: csin (-0.75 + 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: csin (-0.75 + 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csin (-0.75 - 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: csin (-0.75 - 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csin (0.75 + 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: csin (0.75 + 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csin (0.75 - 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: csin (0.75 - 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csin (0x1p-1074 + 1440 i)": ++double: 1 ++idouble: 1 ++ ++# csinh ++Test "Imaginary part of: csinh (-2 - 3 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (-710.5 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (-710.5 - 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (-89.5 + 0.75 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: csinh (-89.5 - 0.75 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csinh (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: csinh (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: csinh (1440 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (710.5 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (710.5 - 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (89.5 + 0.75 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: csinh (89.5 - 0.75 i)": ++float: 1 ++ifloat: 1 ++ ++# csqrt ++Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: csqrt (-2 + 3 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csqrt (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: csqrt (0x1.000002p-126 + 0x1.000002p-126 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i)": ++double: 1 ++idouble: 1 ++ ++# ctan ++Test "Real part of: ctan (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctan (-2 - 3 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ctan (0.75 + 1.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: ctan (0x1p1023 + 1 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ctan (0x1p127 + 1 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: ctan (0x3.243f6cp-1 + 0 i)": ++float: 1 ++ifloat: 1 ++ ++# ctan_downward ++Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++ ++# ctan_tonearest ++Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++ ++# ctan_towardzero ++Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++ ++# ctan_upward ++Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++# ctanh ++Test "Real part of: ctanh (-2 - 3 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh (-2 - 3 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh (0 + 0x3.243f6cp-1 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh (0 + pi/4 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: ctanh (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh (0.75 + 1.25 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: ctanh (1 + 0x1p1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: ctanh (1 + 0x1p127 i)": ++double: 1 ++idouble: 1 ++ ++# ctanh_downward ++Test "Real part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++# ctanh_tonearest ++Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++ ++# ctanh_towardzero ++Test "Real part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++ ++# ctanh_upward ++Test "Imaginary part of: ctanh_upward (0x1p-1074 + 0x1.921fb54442d18p+0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "Imaginary part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i)": ++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 (0x1.f7303cp+1)": ++double: 1 ++idouble: 1 ++Test "erfc (0x1.ffa002p+2)": ++float: 1 ++ifloat: 1 ++Test "erfc (2.0)": ++double: 1 ++idouble: 1 ++Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8": ++double: 1 ++idouble: 1 ++ ++# exp ++Test "exp (1) == e": ++double: 1 ++idouble: 1 ++ ++# exp10 ++Test "exp10 (-1)": ++double: 1 ++idouble: 1 ++Test "exp10 (-305)": ++double: 1 ++idouble: 1 ++Test "exp10 (-36)": ++double: 1 ++idouble: 1 ++Test "exp10 (3)": ++double: 1 ++idouble: 1 ++Test "exp10 (36)": ++double: 1 ++idouble: 1 ++ ++# exp_downward ++Test "exp_downward (2)": ++float: 1 ++ifloat: 1 ++Test "exp_downward (3)": ++float: 1 ++ifloat: 1 ++ ++# exp_towardzero ++Test "exp_towardzero (2)": ++float: 1 ++ifloat: 1 ++Test "exp_towardzero (3)": ++float: 1 ++ifloat: 1 ++ ++# exp_upward ++Test "exp_upward (1)": ++float: 1 ++ifloat: 1 ++ ++# expm1 ++Test "expm1 (0.75) == 1.11700001661267466854536981983709561": ++double: 1 ++idouble: 1 ++Test "expm1 (1)": ++float: 1 ++ifloat: 1 ++Test "expm1 (500.0)": ++double: 1 ++idouble: 1 ++ ++# gamma ++Test "gamma (0.7)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "gamma (1.2)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++# 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 ++ ++# j0 ++Test "j0 (-4.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "j0 (0.75)": ++float: 1 ++ifloat: 1 ++Test "j0 (0x1.d7ce3ap+107)": ++float: 2 ++ifloat: 2 ++Test "j0 (10.0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "j0 (2.0)": ++float: 2 ++ifloat: 2 ++Test "j0 (4.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "j0 (8.0)": ++float: 1 ++ifloat: 1 ++ ++# j1 ++Test "j1 (0x1.3ffp+74)": ++double: 1 ++idouble: 1 ++Test "j1 (0x1.ff00000000002p+840)": ++double: 1 ++idouble: 1 ++Test "j1 (10.0)": ++float: 2 ++ifloat: 2 ++Test "j1 (2.0)": ++double: 1 ++idouble: 1 ++Test "j1 (8.0)": ++double: 1 ++idouble: 1 ++ ++# jn ++Test "jn (0, -4.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (0, 0.75)": ++float: 1 ++ifloat: 1 ++Test "jn (0, 10.0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "jn (0, 2.0)": ++float: 2 ++ifloat: 2 ++Test "jn (0, 4.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (0, 8.0)": ++float: 1 ++ifloat: 1 ++Test "jn (1, 10.0)": ++float: 2 ++ifloat: 2 ++Test "jn (1, 2.0)": ++double: 1 ++idouble: 1 ++Test "jn (1, 8.0)": ++double: 1 ++idouble: 1 ++Test "jn (10, 0.125)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (10, 0.75)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (10, 10.0)": ++double: 4 ++float: 3 ++idouble: 4 ++ifloat: 3 ++Test "jn (10, 2.0)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "jn (2, 0x1.ffff62p+99)": ++double: 2 ++float: 2 ++idouble: 2 ++ifloat: 2 ++Test "jn (2, 2.4048255576957729)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "jn (3, 0.125)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (3, 0.75)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (3, 10.0)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "jn (3, 2.0)": ++float: 1 ++ifloat: 1 ++Test "jn (3, 2.4048255576957729)": ++double: 3 ++idouble: 3 ++Test "jn (4, 2.4048255576957729)": ++double: 1 ++idouble: 1 ++Test "jn (5, 2.4048255576957729)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "jn (6, 2.4048255576957729)": ++double: 4 ++float: 3 ++idouble: 4 ++ifloat: 3 ++Test "jn (7, 2.4048255576957729)": ++double: 3 ++float: 5 ++idouble: 3 ++ifloat: 5 ++Test "jn (8, 2.4048255576957729)": ++double: 3 ++float: 2 ++idouble: 3 ++ifloat: 2 ++Test "jn (9, 2.4048255576957729)": ++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 ++ ++# log10 ++Test "log10 (0.75) == -0.124938736608299953132449886193870744": ++double: 1 ++idouble: 1 ++Test "log10 (e) == log10(e)": ++float: 1 ++ifloat: 1 ++ ++# log1p ++Test "log1p (-0.25)": ++float: 1 ++ifloat: 1 ++ ++# pow ++Test "pow (0x0.ffffffp0, -0x1p24)": ++float: 1 ++ifloat: 1 ++Test "pow (0x0.ffffffp0, 0x1p24)": ++float: 1 ++ifloat: 1 ++Test "pow (0x1.000002p0, 0x1p24)": ++float: 1 ++ifloat: 1 ++ ++# pow10 ++Test "pow10 (-1)": ++double: 1 ++idouble: 1 ++Test "pow10 (-305)": ++double: 1 ++idouble: 1 ++Test "pow10 (-36)": ++double: 1 ++idouble: 1 ++Test "pow10 (3)": ++double: 1 ++idouble: 1 ++Test "pow10 (36)": ++double: 1 ++idouble: 1 ++ ++# pow_downward ++Test "pow_downward (1.5, 1.03125)": ++float: 1 ++ifloat: 1 ++ ++# pow_towardzero ++Test "pow_towardzero (1.5, 1.03125)": ++float: 1 ++ifloat: 1 ++ ++# pow_upward ++Test "pow_upward (1.0625, 1.125)": ++float: 1 ++ifloat: 1 ++ ++# sin_downward ++Test "sin_downward (10)": ++float: 1 ++ifloat: 1 ++Test "sin_downward (3)": ++float: 1 ++ifloat: 1 ++Test "sin_downward (5)": ++float: 1 ++ifloat: 1 ++Test "sin_downward (6)": ++float: 1 ++ifloat: 1 ++ ++# sin_tonearest ++Test "sin_tonearest (1)": ++float: 1 ++ifloat: 1 ++ ++# sin_towardzero ++Test "sin_towardzero (1)": ++float: 1 ++ifloat: 1 ++Test "sin_towardzero (10)": ++float: 1 ++ifloat: 1 ++Test "sin_towardzero (4)": ++float: 1 ++ifloat: 1 ++Test "sin_towardzero (5)": ++float: 1 ++ifloat: 1 ++Test "sin_towardzero (9)": ++float: 1 ++ifloat: 1 ++ ++# sin_upward ++Test "sin_upward (1)": ++float: 1 ++ifloat: 1 ++Test "sin_upward (2)": ++float: 2 ++ifloat: 2 ++Test "sin_upward (4)": ++float: 1 ++ifloat: 1 ++Test "sin_upward (9)": ++float: 1 ++ifloat: 1 ++ ++# sincos ++Test "sincos (0x1p+120) extra output 2": ++float: 1 ++ifloat: 1 ++Test "sincos (0x1p+127) extra output 2": ++float: 1 ++ifloat: 1 ++Test "sincos (M_PI_6l*2.0) extra output 1": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "sincos (M_PI_6l*2.0) extra output 2": ++double: 1 ++idouble: 1 ++Test "sincos (pi/6) extra output 2": ++float: 1 ++ifloat: 1 ++ ++# sinh_downward ++Test "sinh_downward (22)": ++float: 1 ++ifloat: 1 ++Test "sinh_downward (23)": ++float: 1 ++ifloat: 1 ++Test "sinh_downward (24)": ++float: 1 ++ifloat: 1 ++ ++# sinh_towardzero ++Test "sinh_towardzero (22)": ++float: 1 ++ifloat: 1 ++Test "sinh_towardzero (23)": ++float: 1 ++ifloat: 1 ++Test "sinh_towardzero (24)": ++float: 1 ++ifloat: 1 ++ ++# tan_downward ++Test "tan_downward (1)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (10)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (2)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (6)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (8)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (9)": ++float: 1 ++ifloat: 1 ++ ++# tan_towardzero ++Test "tan_towardzero (10)": ++float: 1 ++ifloat: 1 ++Test "tan_towardzero (3)": ++float: 1 ++ifloat: 1 ++Test "tan_towardzero (4)": ++float: 1 ++ifloat: 1 ++Test "tan_towardzero (5)": ++float: 1 ++ifloat: 1 ++Test "tan_towardzero (9)": ++float: 1 ++ifloat: 1 ++ ++# tan_upward ++Test "tan_upward (1)": ++float: 1 ++ifloat: 1 ++Test "tan_upward (10)": ++float: 1 ++ifloat: 1 ++Test "tan_upward (3)": ++float: 1 ++ifloat: 1 ++Test "tan_upward (5)": ++float: 1 ++ifloat: 1 ++ ++# tgamma ++Test "tgamma (-0.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x0.fffffffffffff8p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x0.ffffffp0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (-0x1.000002p0)": ++double: 2 ++idouble: 2 ++Test "tgamma (-0x1.0a32a2p+5)": ++float: 2 ++ifloat: 2 ++Test "tgamma (-0x13.ffffep0)": ++float: 2 ++ifloat: 2 ++Test "tgamma (-0x14.000000000001p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x14.00002p0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (-0x1d.ffffep0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x1e.000000000001p0)": ++double: 3 ++idouble: 3 ++Test "tgamma (-0x1e.00002p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x2.0000000000002p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x2.000004p0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (-0x2.fffffcp0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x27.fffffffffffep0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x28.000000000002p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x28.00004p0)": ++double: 2 ++idouble: 2 ++Test "tgamma (-0x29.00004p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x29.ffffcp0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x3.000004p0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (-0x3.fffffcp0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x3.ffffffffffffep0)": ++double: 2 ++idouble: 2 ++Test "tgamma (-0x31.fffffffffffep0)": ++double: 3 ++idouble: 3 ++Test "tgamma (-0x4.000008p0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (-0x4.fffff8p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x4.ffffffffffffcp0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x5.000008p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x5.ffffffffffffcp0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x6.000008p0)": ++float: 2 ++ifloat: 2 ++Test "tgamma (-0x6.fffff8p0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (-0x6.ffffffffffffcp0)": ++double: 4 ++idouble: 4 ++Test "tgamma (-0x63.fffffffffffcp0)": ++double: 2 ++idouble: 2 ++Test "tgamma (-0x64.000000000004p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x7.0000000000004p0)": ++double: 3 ++idouble: 3 ++Test "tgamma (-0x7.000008p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x7.fffff8p0)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "tgamma (-0x7.ffffffffffffcp0)": ++double: 3 ++idouble: 3 ++Test "tgamma (-0x8.00001p0)": ++double: 2 ++idouble: 2 ++Test "tgamma (-0x9.ffffffffffff8p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x9.fffffp0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (-0x96.000000000008p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0xa.00001p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-2.5)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "tgamma (-3.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-4.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-5.5)": ++double: 1 ++idouble: 1 ++Test "tgamma (-6.5)": ++float: 1 ++ifloat: 1 ++Test "tgamma (-7.5)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (-8.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-9.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (0.5)": ++float: 1 ++ifloat: 1 ++Test "tgamma (0.7)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (0x1.fffffep0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (0x1.fffffffffffffp0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x1p-24)": ++float: 1 ++ifloat: 1 ++Test "tgamma (0x1p-53)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x2.30a43cp+4)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "tgamma (0x2.fffffcp0)": ++float: 3 ++ifloat: 3 ++Test "tgamma (0x3.fffffcp0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (0x3.ffffffffffffep0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x4.0000000000004p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x4.ffffffffffffcp0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x5.0000000000004p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x5.000008p0)": ++float: 2 ++ifloat: 2 ++Test "tgamma (0x5.fffff8p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (0x6.0000000000004p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x6.000008p0)": ++float: 2 ++ifloat: 2 ++Test "tgamma (0x6.fffff8p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x6.ffffffffffffcp0)": ++double: 4 ++idouble: 4 ++Test "tgamma (0x7.0000000000004p0)": ++double: 4 ++idouble: 4 ++Test "tgamma (0x7.000008p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (0x7.fffff8p0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (0x7.ffffffffffffcp0)": ++double: 2 ++idouble: 2 ++Test "tgamma (0x8.00001p0)": ++double: 2 ++idouble: 2 ++Test "tgamma (0xa.b9fd72b0fb238p+4)": ++double: 1 ++idouble: 1 ++Test "tgamma (10)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (18.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (19.5)": ++double: 2 ++idouble: 2 ++Test "tgamma (2.5)": ++float: 2 ++ifloat: 2 ++Test "tgamma (23.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (29.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (3)": ++float: 1 ++ifloat: 1 ++Test "tgamma (3.5)": ++float: 2 ++ifloat: 2 ++Test "tgamma (30.5)": ++float: 1 ++ifloat: 1 ++Test "tgamma (33.5)": ++float: 1 ++ifloat: 1 ++Test "tgamma (34.5)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "tgamma (4)": ++float: 1 ++ifloat: 1 ++Test "tgamma (4.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (6)": ++float: 1 ++ifloat: 1 ++Test "tgamma (6.5)": ++float: 1 ++ifloat: 1 ++Test "tgamma (7)": ++double: 1 ++idouble: 1 ++Test "tgamma (7.5)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (8)": ++double: 1 ++idouble: 1 ++Test "tgamma (8.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (9)": ++double: 1 ++idouble: 1 ++Test "tgamma (9.5)": ++double: 1 ++idouble: 1 ++ ++# y0 ++Test "y0 (0x1.3ffp+74)": ++double: 1 ++idouble: 1 ++Test "y0 (0x1.ff00000000002p+840)": ++double: 1 ++idouble: 1 ++Test "y0 (0x1p-10)": ++double: 1 ++idouble: 1 ++Test "y0 (0x1p-110)": ++double: 1 ++idouble: 1 ++Test "y0 (0x1p-20)": ++float: 1 ++ifloat: 1 ++Test "y0 (0x1p-30)": ++float: 1 ++ifloat: 1 ++Test "y0 (0x1p-40)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "y0 (0x1p-50)": ++float: 1 ++ifloat: 1 ++Test "y0 (0x1p-70)": ++double: 1 ++idouble: 1 ++Test "y0 (0x1p-80)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "y0 (1.0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "y0 (1.5)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "y0 (10.0)": ++float: 1 ++ifloat: 1 ++Test "y0 (8.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++# y1 ++Test "y1 (0.125)": ++double: 1 ++idouble: 1 ++Test "y1 (0x1.27e204p+99)": ++double: 1 ++idouble: 1 ++Test "y1 (0x1p-10)": ++double: 1 ++idouble: 1 ++Test "y1 (1.5)": ++float: 1 ++ifloat: 1 ++Test "y1 (10.0)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "y1 (2.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "y1 (8.0)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++# yn ++Test "yn (0, 1.0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "yn (0, 1.5)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "yn (0, 10.0)": ++float: 1 ++ifloat: 1 ++Test "yn (0, 8.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "yn (1, 0.125)": ++double: 1 ++idouble: 1 ++Test "yn (1, 1.5)": ++float: 1 ++ifloat: 1 ++Test "yn (1, 10.0)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "yn (1, 2.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "yn (1, 8.0)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "yn (10, 0.125)": ++double: 1 ++idouble: 1 ++Test "yn (10, 0.75)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "yn (10, 1.0)": ++double: 1 ++idouble: 1 ++Test "yn (10, 10.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "yn (10, 2.0)": ++double: 2 ++idouble: 2 ++Test "yn (3, 0.125)": ++double: 1 ++idouble: 1 ++Test "yn (3, 0.75)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "yn (3, 10.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "yn (3, 2.0)": ++double: 1 ++idouble: 1 ++ ++# Maximal error of functions: ++Function: "acos_downward": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "acos_towardzero": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "asin_downward": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "asin_towardzero": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "asin_upward": ++float: 1 ++ifloat: 1 ++ ++Function: "atan2": ++float: 1 ++ifloat: 1 ++ ++Function: "atanh": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "cacos": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Imaginary part of "cacos": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Real part of "cacosh": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Imaginary part of "cacosh": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Real part of "casin": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "casin": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Real part of "casinh": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Imaginary part of "casinh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Real part of "catan": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "catan": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Real part of "catanh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "catanh": ++float: 1 ++ifloat: 1 ++ ++Function: "cbrt": ++double: 1 ++idouble: 1 ++ ++Function: Real part of "ccos": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 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: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: Imaginary part of "cexp": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Real part of "clog": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "clog": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "clog10": ++double: 2 ++float: 2 ++idouble: 2 ++ifloat: 2 ++ ++Function: Imaginary part of "clog10": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "cos": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: "cos_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "cos_tonearest": ++float: 1 ++ifloat: 1 ++ ++Function: "cos_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "cos_upward": ++float: 2 ++ifloat: 2 ++ ++Function: "cosh_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "cosh_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "cpow": ++double: 2 ++float: 4 ++idouble: 2 ++ifloat: 4 ++ ++Function: Imaginary part of "cpow": ++float: 2 ++ifloat: 2 ++ ++Function: Real part of "csin": ++double: 1 ++float: 1 ++idouble: 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": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Real part of "ctan": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctan": ++double: 1 ++idouble: 1 ++ ++Function: Real part of "ctan_downward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: Imaginary part of "ctan_downward": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "ctan_tonearest": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctan_tonearest": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "ctan_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctan_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "ctan_upward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: Imaginary part of "ctan_upward": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Real part of "ctanh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctanh": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Real part of "ctanh_downward": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctanh_downward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: Real part of "ctanh_tonearest": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctanh_tonearest": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "ctanh_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctanh_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "ctanh_upward": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Imaginary part of "ctanh_upward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: "erf": ++double: 1 ++idouble: 1 ++ ++Function: "erfc": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "exp": ++double: 1 ++idouble: 1 ++ ++Function: "exp10": ++double: 1 ++idouble: 1 ++ ++Function: "exp_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "exp_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "exp_upward": ++float: 1 ++ifloat: 1 ++ ++Function: "expm1": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "gamma": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: "hypot": ++float: 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: 4 ++float: 5 ++idouble: 4 ++ifloat: 5 ++ ++Function: "lgamma": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: "log": ++float: 1 ++ifloat: 1 ++ ++Function: "log10": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: "log1p": ++float: 1 ++ifloat: 1 ++ ++Function: "pow": ++float: 1 ++ifloat: 1 ++ ++Function: "pow10": ++double: 1 ++idouble: 1 ++ ++Function: "pow_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "pow_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "pow_upward": ++float: 1 ++ifloat: 1 ++ ++Function: "sin_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "sin_tonearest": ++float: 1 ++ifloat: 1 ++ ++Function: "sin_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "sin_upward": ++float: 2 ++ifloat: 2 ++ ++Function: "sincos": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "sinh_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "sinh_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "tan": ++double: 1 ++idouble: 1 ++ ++Function: "tan_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "tan_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "tan_upward": ++float: 1 ++ifloat: 1 ++ ++Function: "tgamma": ++double: 4 ++float: 3 ++idouble: 4 ++ifloat: 3 ++ ++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-mips32 uClibc-git/test/math/libm-test-ulps-mips32 +--- uClibc-0.9.33.2/test/math/libm-test-ulps-mips32 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-git/test/math/libm-test-ulps-mips32 2014-07-25 20:36:11.517359363 +0200 +@@ -0,0 +1,4966 @@ ++# Begin of automatic generation ++ ++# acos_downward ++Test "acos_downward (-0)": ++float: 1 ++ifloat: 1 ++Test "acos_downward (-0.5)": ++double: 1 ++idouble: 1 ++Test "acos_downward (-1)": ++float: 1 ++ifloat: 1 ++Test "acos_downward (0)": ++float: 1 ++ifloat: 1 ++Test "acos_downward (0.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++# acos_towardzero ++Test "acos_towardzero (-0)": ++float: 1 ++ifloat: 1 ++Test "acos_towardzero (-0.5)": ++double: 1 ++idouble: 1 ++Test "acos_towardzero (-1)": ++float: 1 ++ifloat: 1 ++Test "acos_towardzero (0)": ++float: 1 ++ifloat: 1 ++Test "acos_towardzero (0.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++# asin_downward ++Test "asin_downward (-0.5)": ++double: 1 ++idouble: 1 ++Test "asin_downward (0.5)": ++double: 1 ++idouble: 1 ++Test "asin_downward (1.0)": ++float: 1 ++ifloat: 1 ++ ++# asin_towardzero ++Test "asin_towardzero (-0.5)": ++double: 1 ++idouble: 1 ++Test "asin_towardzero (-1.0)": ++float: 1 ++ifloat: 1 ++Test "asin_towardzero (0.5)": ++double: 1 ++idouble: 1 ++Test "asin_towardzero (1.0)": ++float: 1 ++ifloat: 1 ++ ++# asin_upward ++Test "asin_upward (-1.0)": ++float: 1 ++ifloat: 1 ++ ++# atan2 ++Test "atan2 (-0.75, -1.0)": ++float: 1 ++ifloat: 1 ++Test "atan2 (-max_value, -min_value)": ++float: 1 ++ifloat: 1 ++Test "atan2 (0.75, -1.0)": ++float: 1 ++ifloat: 1 ++Test "atan2 (1.390625, 0.9296875)": ++float: 1 ++ifloat: 1 ++ ++# atanh ++Test "atanh (0.75)": ++float: 1 ++ifloat: 1 ++ ++# cacos ++Test "Imaginary part of: cacos (+0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (+0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (+0 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (+0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (+0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (+0 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0.25 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0.25 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (-0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (-0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1.fp-100 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-100 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0x0.ffffffp0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 1.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0x0.ffffffp0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 1.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1.fp-30 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-30 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 + 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 - 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 + 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 - 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-23 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1p-23 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-23 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-23 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1p-23 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-23 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 + 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 - 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 + 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 - 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-1.0 + 0x1p50 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-1.0 - 0x1p50 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0.5 + +0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1p-63 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1p-63 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0x0.ffffffp0 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0x0.ffffffp0 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacos (0x0.ffffffp0 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0x0.ffffffp0 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacos (0x1.0000000000001p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0x1.0000000000001p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0x1.000002p0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0x1.000002p0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (1.0 + 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (1.0 + 0x1.fp-10 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (1.0 - 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (1.0 - 0x1.fp-10 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ ++# cacosh ++Test "Real part of: cacosh (+0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (+0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (+0 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (+0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (+0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (+0 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0.25 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0.25 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacosh (-0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacosh (-0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-100 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-100 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x0.ffffffp0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 1.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x0.ffffffp0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 1.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-30 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-30 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 + 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 - 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 + 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 - 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 + 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 - 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 + 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 - 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-1.0 + 0x1p50 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-1.0 - 0x1p50 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0.5 + +0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1p-63 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0.5 - 0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1p-63 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacosh (0x1.0000000000001p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0x1.0000000000001p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0x1.000002p0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacosh (0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0x1.000002p0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacosh (0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (1.0 + 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (1.0 + 0x1.fp-10 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacosh (1.0 - 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (1.0 - 0x1.fp-10 i)": ++float: 2 ++ifloat: 2 ++ ++# casin ++Test "Imaginary part of: casin (+0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (+0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (+0 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (+0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (+0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (+0 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: casin (-0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: casin (-0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (-0x1.fp-10 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-0x1.fp-10 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (-0x1p-23 + 0.5 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-0x1p-23 + 0x1.000002p0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casin (-0x1p-23 - 0.5 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-0x1p-23 - 0x1.000002p0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (-1.0 + 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (-1.0 - 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: casin (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: casin (0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (0x1.fp-10 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (0x1.fp-10 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (0x1p-23 + 0.5 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (0x1p-23 + 0x1.000002p0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casin (0x1p-23 - 0.5 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (0x1p-23 - 0x1.000002p0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (1.0 + 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (1.0 - 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ ++# casinh ++Test "Imaginary part of: casinh (-0.25 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (-0.25 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0.5 + +0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (-0.5 + 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (-0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (-0.5 - 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (-0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0x0.ffffffp0 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x0.ffffffp0 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (-0x1.000002p0 + 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (-0x1.000002p0 - 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0x1.fp-10 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0x1.fp-10 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0x1.fp-129 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1.fp-129 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-105 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-105 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-112 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-112 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-23 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-23 + 0x0.ffffffp0 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: casinh (-0x1p-23 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0x1p-23 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-23 - 0x0.ffffffp0 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: casinh (-0x1p-23 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0x1p-52 + 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-52 - 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.0 + +0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 + 0.25 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (-1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-100 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-129 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-30 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 - 0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 - 0.25 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (-1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-100 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-129 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-30 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (-1.5 + +0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.5 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.5 - 0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.5 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-1.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (0.25 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (0.25 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0.5 + +0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (0.5 + 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (0.5 - 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (0x0.ffffffp0 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x0.ffffffp0 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (0x1.000002p0 + 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (0x1.000002p0 - 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (0x1.fp-10 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0x1.fp-10 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0x1.fp-129 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1.fp-129 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-105 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-105 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-112 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-112 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-23 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-23 + 0x0.ffffffp0 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: casinh (0x1p-23 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0x1p-23 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-23 - 0x0.ffffffp0 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: casinh (0x1p-23 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0x1p-52 + 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-52 - 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.0 + +0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 + 0.25 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-100 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-129 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-30 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 - 0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 - 0.25 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-100 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-129 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-30 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casinh (1.5 + +0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.5 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.5 - 0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.5 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (1.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++ ++# catan ++Test "Imaginary part of: catan (-0x0.fffffffffffff8p0 + 0x1p-27 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x0.ffffffp0 + 0x1p-13 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1.0000000000001p0 - 0x1p-27 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catan (-0x1.000002p0 + 0x1p-126 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1.000002p0 - 0x1p-126 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1.000002p0 - 0x1p-13 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1.fp1023 - 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1.fp127 - 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1p-1020 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1p-1020 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catan (-0x1p-13 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1p-13 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1p-13 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-54 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-54 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-57 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-57 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-1.0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-1.0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-2 - 3 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x0.fffffffffffff8p0 + 0x1p-27 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x0.ffffffp0 + 0x1p-13 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1.0000000000001p0 - 0x1p-27 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catan (0x1.000002p0 + 0x1p-126 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1.000002p0 - 0x1p-126 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1.000002p0 - 0x1p-13 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1.fp1023 - 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1.fp127 - 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1p-1020 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1p-1020 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catan (0x1p-13 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1p-13 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1p-13 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-54 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-54 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-57 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-57 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (1.0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (1.0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++ ++# catanh ++Test "Real part of: catanh (-0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (-0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (-0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-0x1.fp1023 - 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-0x1.fp127 - 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (-0x1p-126 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (-0x1p-126 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-0x1p-13 + 0x1.000002p0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (-0x1p-13 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (-0x1p-13 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-0x1p-13 - 0x1.000002p0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (-0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (-0x1p-13 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-0x1p-27 + 0x1.0000000000001p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-0x1p-27 - 0x1.0000000000001p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-1.0 + 0x1p-1020 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (-1.0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 + 0x1p-54 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 + 0x1p-57 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 - 0x1p-1020 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (-1.0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 - 0x1p-54 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 - 0x1p-57 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-2 - 3 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (0x1.fp1023 - 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (0x1.fp127 - 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (0x1p-126 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1p-126 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (0x1p-13 + 0x0.ffffffp0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1p-13 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1p-13 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (0x1p-13 - 0x0.ffffffp0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1p-13 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (0x1p-27 + 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (0x1p-27 - 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (1.0 + 0x1p-1020 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (1.0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 + 0x1p-54 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 + 0x1p-57 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 - 0x1p-1020 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (1.0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 - 0x1p-54 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 - 0x1p-57 i)": ++float: 1 ++ifloat: 1 ++ ++# cbrt ++Test "cbrt (-27.0)": ++double: 1 ++idouble: 1 ++Test "cbrt (0.75)": ++double: 1 ++idouble: 1 ++Test "cbrt (0.9921875)": ++double: 1 ++idouble: 1 ++ ++# ccos ++Test "Imaginary part of: ccos (-0.75 + 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccos (-0.75 + 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (-0.75 - 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccos (-0.75 - 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: ccos (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (0.75 + 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccos (0.75 + 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (0.75 - 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccos (0.75 - 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (0x1p-1074 + 1440 i)": ++double: 1 ++idouble: 1 ++ ++# ccosh ++Test "Real part of: ccosh (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (-710.5 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccosh (-710.5 - 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccosh (-89.5 + 0.75 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (-89.5 - 0.75 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: ccosh (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccosh (710.5 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccosh (710.5 - 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccosh (89.5 + 0.75 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (89.5 - 0.75 i)": ++float: 1 ++ifloat: 1 ++ ++# cexp ++Test "Imaginary part of: cexp (-2.0 - 3.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cexp (-95 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cexp (1440 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (50 + 0x1p127 i)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "Imaginary part of: cexp (50 + 0x1p127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (500 + 0x1p1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (709.8125 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cexp (709.8125 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (88.75 + 0.75 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cexp (88.75 + 0.75 i)": ++float: 2 ++ifloat: 2 ++ ++# clog ++Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1.fp+127 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1.fp+127 - 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1p-149 + 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog (-0x1p-149 + 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1p-149 - 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1.fp+127 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog (0x1p-147 + 0x1p-147 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1p-149 + 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog (0x2818p-15 + 0x798fp-15 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (1.0 + 0x1.234566p-10 i)": ++float: 1 ++ifloat: 1 ++ ++# clog10 ++Test "Imaginary part of: clog10 (-0 + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-0 - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)": ++double: 2 ++idouble: 2 ++Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i)": ++double: 2 ++idouble: 2 ++Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+1023 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+1023 - 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+127 + 0x1p-149 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+127 - 0x1p-149 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-0x1p-1074 + 0x1.fp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1p-1074 - 0x1.fp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1p-149 + 0x1.fp+127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1p-149 - 0x1.fp+127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-1.0 + 0x1.234566p-20 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-2 - 3 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-3 + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-3 - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf + 0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf + 1 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf + inf i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-inf - 0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf - 1 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0 + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0 - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x0.fffffffffffff8p0 + 0x0.fffffffffffff8p-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x0.ffffffp0 + 0x0.ffffffp-100 i)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-10 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-10 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-100 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.234566p-30 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.234566p-60 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x164c74eea876p-45 + 0x16f393482f77p-45 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1a6p-10 + 0x3a5p-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1073 + 0x1p-1073 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1074 + 0x1.fp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1074 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1074 - 0x1.fp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-149 + 0x1.fp+127 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-149 - 0x1.fp+127 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-509 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-510 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-511 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-61 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-62 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-63 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x2818p-15 + 0x798fp-15 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x2818p-15 + 0x798fp-15 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x2dd46725bp-35 + 0x7783a1284p-35 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x9b57bp-20 + 0xcb7b4p-20 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0xf2p-10 + 0x3e3p-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0xf2p-10 + 0x3e3p-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (3 + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (3 - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (inf + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (inf - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++# cos ++Test "cos (0x1p+120)": ++float: 1 ++ifloat: 1 ++Test "cos (0x1p+127)": ++float: 1 ++ifloat: 1 ++Test "cos (M_PI_6l * 2.0)": ++double: 1 ++idouble: 1 ++Test "cos (M_PI_6l * 4.0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++# cos_downward ++Test "cos_downward (1)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (2)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (3)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (4)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (5)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (7)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (8)": ++float: 1 ++ifloat: 1 ++ ++# cos_tonearest ++Test "cos_tonearest (7)": ++float: 1 ++ifloat: 1 ++ ++# cos_towardzero ++Test "cos_towardzero (2)": ++float: 1 ++ifloat: 1 ++Test "cos_towardzero (3)": ++float: 1 ++ifloat: 1 ++Test "cos_towardzero (5)": ++float: 1 ++ifloat: 1 ++Test "cos_towardzero (7)": ++float: 1 ++ifloat: 1 ++Test "cos_towardzero (8)": ++float: 1 ++ifloat: 1 ++ ++# cos_upward ++Test "cos_upward (10)": ++float: 1 ++ifloat: 1 ++Test "cos_upward (6)": ++float: 1 ++ifloat: 1 ++Test "cos_upward (7)": ++float: 1 ++ifloat: 1 ++Test "cos_upward (9)": ++float: 2 ++ifloat: 2 ++ ++# cosh_downward ++Test "cosh_downward (22)": ++float: 1 ++ifloat: 1 ++Test "cosh_downward (23)": ++float: 1 ++ifloat: 1 ++Test "cosh_downward (24)": ++float: 1 ++ifloat: 1 ++ ++# cosh_towardzero ++Test "cosh_towardzero (22)": ++float: 1 ++ifloat: 1 ++Test "cosh_towardzero (23)": ++float: 1 ++ifloat: 1 ++Test "cosh_towardzero (24)": ++float: 1 ++ifloat: 1 ++ ++# cpow ++Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i)": ++double: 1 ++float: 4 ++idouble: 1 ++ifloat: 4 ++Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i)": ++double: 2 ++float: 3 ++idouble: 2 ++ifloat: 3 ++Test "Real part of: cpow (2 + 3 i, 4 + 0 i)": ++double: 1 ++float: 4 ++idouble: 1 ++ifloat: 4 ++Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i)": ++float: 2 ++ifloat: 2 ++ ++# csin ++Test "Real part of: csin (-0.75 + 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: csin (-0.75 + 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csin (-0.75 - 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: csin (-0.75 - 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csin (0.75 + 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: csin (0.75 + 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csin (0.75 - 710.5 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: csin (0.75 - 89.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csin (0x1p-1074 + 1440 i)": ++double: 1 ++idouble: 1 ++ ++# csinh ++Test "Imaginary part of: csinh (-2 - 3 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (-710.5 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (-710.5 - 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (-89.5 + 0.75 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: csinh (-89.5 - 0.75 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csinh (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: csinh (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: csinh (1440 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (710.5 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (710.5 - 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (89.5 + 0.75 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: csinh (89.5 - 0.75 i)": ++float: 1 ++ifloat: 1 ++ ++# csqrt ++Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: csqrt (-2 + 3 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csqrt (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: csqrt (0x1.000002p-126 + 0x1.000002p-126 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i)": ++double: 1 ++idouble: 1 ++ ++# ctan ++Test "Real part of: ctan (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctan (-2 - 3 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ctan (0.75 + 1.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: ctan (0x1p1023 + 1 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ctan (0x1p127 + 1 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: ctan (0x3.243f6cp-1 + 0 i)": ++float: 1 ++ifloat: 1 ++ ++# ctan_downward ++Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++ ++# ctan_tonearest ++Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++ ++# ctan_towardzero ++Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++ ++# ctan_upward ++Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++# ctanh ++Test "Real part of: ctanh (-2 - 3 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh (-2 - 3 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh (0 + 0x3.243f6cp-1 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh (0 + pi/4 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: ctanh (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh (0.75 + 1.25 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: ctanh (1 + 0x1p1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: ctanh (1 + 0x1p127 i)": ++double: 1 ++idouble: 1 ++ ++# ctanh_downward ++Test "Real part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++# ctanh_tonearest ++Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++ ++# ctanh_towardzero ++Test "Real part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++ ++# ctanh_upward ++Test "Imaginary part of: ctanh_upward (0x1p-1074 + 0x1.921fb54442d18p+0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "Imaginary part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++# erf ++Test "erf (1.25)": ++double: 1 ++idouble: 1 ++ ++# erfc ++Test "erfc (0x1.f7303cp+1)": ++double: 1 ++idouble: 1 ++Test "erfc (0x1.ffa002p+2)": ++float: 1 ++ifloat: 1 ++Test "erfc (2.0)": ++double: 1 ++idouble: 1 ++Test "erfc (4.125)": ++double: 1 ++idouble: 1 ++ ++# exp10 ++Test "exp10 (-1)": ++double: 1 ++idouble: 1 ++Test "exp10 (-305)": ++double: 1 ++idouble: 1 ++Test "exp10 (-36)": ++double: 1 ++idouble: 1 ++Test "exp10 (3)": ++double: 1 ++idouble: 1 ++Test "exp10 (36)": ++double: 1 ++idouble: 1 ++ ++# exp_downward ++Test "exp_downward (2)": ++float: 1 ++ifloat: 1 ++Test "exp_downward (3)": ++float: 1 ++ifloat: 1 ++ ++# exp_towardzero ++Test "exp_towardzero (2)": ++float: 1 ++ifloat: 1 ++Test "exp_towardzero (3)": ++float: 1 ++ifloat: 1 ++ ++# exp_upward ++Test "exp_upward (1)": ++float: 1 ++ifloat: 1 ++ ++# expm1 ++Test "expm1 (0.75)": ++double: 1 ++idouble: 1 ++Test "expm1 (1)": ++float: 1 ++ifloat: 1 ++Test "expm1 (500.0)": ++double: 1 ++idouble: 1 ++ ++# gamma ++Test "gamma (0.7)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "gamma (1.2)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++# hypot ++Test "hypot (-0.7, -12.4)": ++float: 1 ++ifloat: 1 ++Test "hypot (-0.7, 12.4)": ++float: 1 ++ifloat: 1 ++Test "hypot (-12.4, -0.7)": ++float: 1 ++ifloat: 1 ++Test "hypot (-12.4, 0.7)": ++float: 1 ++ifloat: 1 ++Test "hypot (0.7, -12.4)": ++float: 1 ++ifloat: 1 ++Test "hypot (0.7, 12.4)": ++float: 1 ++ifloat: 1 ++Test "hypot (12.4, -0.7)": ++float: 1 ++ifloat: 1 ++Test "hypot (12.4, 0.7)": ++float: 1 ++ifloat: 1 ++ ++# j0 ++Test "j0 (-4.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "j0 (0.75)": ++float: 1 ++ifloat: 1 ++Test "j0 (0x1.d7ce3ap+107)": ++float: 2 ++ifloat: 2 ++Test "j0 (10.0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "j0 (2.0)": ++float: 2 ++ifloat: 2 ++Test "j0 (4.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "j0 (8.0)": ++float: 1 ++ifloat: 1 ++ ++# j1 ++Test "j1 (0x1.3ffp+74)": ++double: 1 ++idouble: 1 ++Test "j1 (0x1.ff00000000002p+840)": ++double: 1 ++idouble: 1 ++Test "j1 (10.0)": ++float: 2 ++ifloat: 2 ++Test "j1 (2.0)": ++double: 1 ++idouble: 1 ++Test "j1 (8.0)": ++double: 1 ++idouble: 1 ++ ++# jn ++Test "jn (0, -4.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (0, 0.75)": ++float: 1 ++ifloat: 1 ++Test "jn (0, 10.0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "jn (0, 2.0)": ++float: 2 ++ifloat: 2 ++Test "jn (0, 4.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (0, 8.0)": ++float: 1 ++ifloat: 1 ++Test "jn (1, 10.0)": ++float: 2 ++ifloat: 2 ++Test "jn (1, 2.0)": ++double: 1 ++idouble: 1 ++Test "jn (1, 8.0)": ++double: 1 ++idouble: 1 ++Test "jn (10, 0.125)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (10, 0.75)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (10, 10.0)": ++double: 4 ++float: 3 ++idouble: 4 ++ifloat: 3 ++Test "jn (10, 2.0)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "jn (2, 0x1.ffff62p+99)": ++double: 2 ++float: 2 ++idouble: 2 ++ifloat: 2 ++Test "jn (2, 2.4048255576957729)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "jn (3, 0.125)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (3, 0.75)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (3, 10.0)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "jn (3, 2.0)": ++float: 1 ++ifloat: 1 ++Test "jn (3, 2.4048255576957729)": ++double: 3 ++idouble: 3 ++Test "jn (4, 2.4048255576957729)": ++double: 1 ++idouble: 1 ++Test "jn (5, 2.4048255576957729)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "jn (6, 2.4048255576957729)": ++double: 4 ++float: 3 ++idouble: 4 ++ifloat: 3 ++Test "jn (7, 2.4048255576957729)": ++double: 3 ++float: 5 ++idouble: 3 ++ifloat: 5 ++Test "jn (8, 2.4048255576957729)": ++double: 3 ++float: 2 ++idouble: 3 ++ifloat: 2 ++Test "jn (9, 2.4048255576957729)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++# lgamma ++Test "lgamma (0.7)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "lgamma (1.2)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++# log10 ++Test "log10 (0.75)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "log10 (e)": ++float: 1 ++ifloat: 1 ++ ++# log1p ++Test "log1p (-0.25)": ++float: 1 ++ifloat: 1 ++ ++# pow ++Test "pow (0x0.ffffffp0, -0x1p24)": ++float: 1 ++ifloat: 1 ++Test "pow (0x0.ffffffp0, 0x1p24)": ++float: 1 ++ifloat: 1 ++Test "pow (0x1.000002p0, 0x1p24)": ++float: 1 ++ifloat: 1 ++ ++# pow10 ++Test "pow10 (-1)": ++double: 1 ++idouble: 1 ++Test "pow10 (-305)": ++double: 1 ++idouble: 1 ++Test "pow10 (-36)": ++double: 1 ++idouble: 1 ++Test "pow10 (3)": ++double: 1 ++idouble: 1 ++Test "pow10 (36)": ++double: 1 ++idouble: 1 ++ ++# pow_downward ++Test "pow_downward (1.5, 1.03125)": ++float: 1 ++ifloat: 1 ++ ++# pow_towardzero ++Test "pow_towardzero (1.5, 1.03125)": ++float: 1 ++ifloat: 1 ++ ++# pow_upward ++Test "pow_upward (1.0625, 1.125)": ++float: 1 ++ifloat: 1 ++ ++# sin_downward ++Test "sin_downward (10)": ++float: 1 ++ifloat: 1 ++Test "sin_downward (3)": ++float: 1 ++ifloat: 1 ++Test "sin_downward (5)": ++float: 1 ++ifloat: 1 ++Test "sin_downward (6)": ++float: 1 ++ifloat: 1 ++ ++# sin_tonearest ++Test "sin_tonearest (1)": ++float: 1 ++ifloat: 1 ++ ++# sin_towardzero ++Test "sin_towardzero (1)": ++float: 1 ++ifloat: 1 ++Test "sin_towardzero (10)": ++float: 1 ++ifloat: 1 ++Test "sin_towardzero (4)": ++float: 1 ++ifloat: 1 ++Test "sin_towardzero (5)": ++float: 1 ++ifloat: 1 ++Test "sin_towardzero (9)": ++float: 1 ++ifloat: 1 ++ ++# sin_upward ++Test "sin_upward (1)": ++float: 1 ++ifloat: 1 ++Test "sin_upward (2)": ++float: 2 ++ifloat: 2 ++Test "sin_upward (4)": ++float: 1 ++ifloat: 1 ++Test "sin_upward (9)": ++float: 1 ++ifloat: 1 ++ ++# sincos ++Test "sincos (0x1p+120) extra output 2": ++float: 1 ++ifloat: 1 ++Test "sincos (0x1p+127) extra output 2": ++float: 1 ++ifloat: 1 ++Test "sincos (M_PI_6l*2.0) extra output 1": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "sincos (M_PI_6l*2.0) extra output 2": ++double: 1 ++idouble: 1 ++Test "sincos (pi/6) extra output 2": ++float: 1 ++ifloat: 1 ++ ++# sinh_downward ++Test "sinh_downward (22)": ++float: 1 ++ifloat: 1 ++Test "sinh_downward (23)": ++float: 1 ++ifloat: 1 ++Test "sinh_downward (24)": ++float: 1 ++ifloat: 1 ++ ++# sinh_towardzero ++Test "sinh_towardzero (22)": ++float: 1 ++ifloat: 1 ++Test "sinh_towardzero (23)": ++float: 1 ++ifloat: 1 ++Test "sinh_towardzero (24)": ++float: 1 ++ifloat: 1 ++ ++# tan_downward ++Test "tan_downward (1)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (10)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (2)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (6)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (8)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (9)": ++float: 1 ++ifloat: 1 ++ ++# tan_towardzero ++Test "tan_towardzero (10)": ++float: 1 ++ifloat: 1 ++Test "tan_towardzero (3)": ++float: 1 ++ifloat: 1 ++Test "tan_towardzero (4)": ++float: 1 ++ifloat: 1 ++Test "tan_towardzero (5)": ++float: 1 ++ifloat: 1 ++Test "tan_towardzero (9)": ++float: 1 ++ifloat: 1 ++ ++# tan_upward ++Test "tan_upward (1)": ++float: 1 ++ifloat: 1 ++Test "tan_upward (10)": ++float: 1 ++ifloat: 1 ++Test "tan_upward (3)": ++float: 1 ++ifloat: 1 ++Test "tan_upward (5)": ++float: 1 ++ifloat: 1 ++ ++# tgamma ++Test "tgamma (-0.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x0.fffffffffffff8p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x0.ffffffp0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (-0x1.000002p0)": ++double: 2 ++idouble: 2 ++Test "tgamma (-0x1.0a32a2p+5)": ++float: 2 ++ifloat: 2 ++Test "tgamma (-0x13.ffffep0)": ++float: 2 ++ifloat: 2 ++Test "tgamma (-0x14.000000000001p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x14.00002p0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (-0x1d.ffffep0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x1e.000000000001p0)": ++double: 3 ++idouble: 3 ++Test "tgamma (-0x1e.00002p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x2.0000000000002p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x2.000004p0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (-0x2.fffffcp0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x27.fffffffffffep0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x28.000000000002p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x28.00004p0)": ++double: 2 ++idouble: 2 ++Test "tgamma (-0x29.00004p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x29.ffffcp0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x3.000004p0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (-0x3.fffffcp0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x3.ffffffffffffep0)": ++double: 2 ++idouble: 2 ++Test "tgamma (-0x31.fffffffffffep0)": ++double: 3 ++idouble: 3 ++Test "tgamma (-0x4.000008p0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (-0x4.fffff8p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x4.ffffffffffffcp0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x5.000008p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x5.ffffffffffffcp0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x6.000008p0)": ++float: 2 ++ifloat: 2 ++Test "tgamma (-0x6.fffff8p0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (-0x6.ffffffffffffcp0)": ++double: 4 ++idouble: 4 ++Test "tgamma (-0x63.fffffffffffcp0)": ++double: 2 ++idouble: 2 ++Test "tgamma (-0x64.000000000004p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x7.0000000000004p0)": ++double: 3 ++idouble: 3 ++Test "tgamma (-0x7.000008p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x7.fffff8p0)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "tgamma (-0x7.ffffffffffffcp0)": ++double: 3 ++idouble: 3 ++Test "tgamma (-0x8.00001p0)": ++double: 2 ++idouble: 2 ++Test "tgamma (-0x9.ffffffffffff8p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x9.fffffp0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (-0x96.000000000008p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0xa.00001p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-2.5)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "tgamma (-3.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-4.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-5.5)": ++double: 1 ++idouble: 1 ++Test "tgamma (-6.5)": ++float: 1 ++ifloat: 1 ++Test "tgamma (-7.5)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (-8.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-9.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (0.5)": ++float: 1 ++ifloat: 1 ++Test "tgamma (0.7)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (0x1.fffffep0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (0x1.fffffffffffffp0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x1p-24)": ++float: 1 ++ifloat: 1 ++Test "tgamma (0x1p-53)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x2.30a43cp+4)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "tgamma (0x2.fffffcp0)": ++float: 3 ++ifloat: 3 ++Test "tgamma (0x3.fffffcp0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (0x3.ffffffffffffep0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x4.0000000000004p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x4.ffffffffffffcp0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x5.0000000000004p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x5.000008p0)": ++float: 2 ++ifloat: 2 ++Test "tgamma (0x5.fffff8p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (0x6.0000000000004p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x6.000008p0)": ++float: 2 ++ifloat: 2 ++Test "tgamma (0x6.fffff8p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x6.ffffffffffffcp0)": ++double: 4 ++idouble: 4 ++Test "tgamma (0x7.0000000000004p0)": ++double: 4 ++idouble: 4 ++Test "tgamma (0x7.000008p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (0x7.fffff8p0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (0x7.ffffffffffffcp0)": ++double: 2 ++idouble: 2 ++Test "tgamma (0x8.00001p0)": ++double: 2 ++idouble: 2 ++Test "tgamma (0xa.b9fd72b0fb238p+4)": ++double: 1 ++idouble: 1 ++Test "tgamma (10)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (18.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (19.5)": ++double: 2 ++idouble: 2 ++Test "tgamma (2.5)": ++float: 2 ++ifloat: 2 ++Test "tgamma (23.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (29.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (3)": ++float: 1 ++ifloat: 1 ++Test "tgamma (3.5)": ++float: 2 ++ifloat: 2 ++Test "tgamma (30.5)": ++float: 1 ++ifloat: 1 ++Test "tgamma (33.5)": ++float: 1 ++ifloat: 1 ++Test "tgamma (34.5)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "tgamma (4)": ++float: 1 ++ifloat: 1 ++Test "tgamma (4.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (6)": ++float: 1 ++ifloat: 1 ++Test "tgamma (6.5)": ++float: 1 ++ifloat: 1 ++Test "tgamma (7)": ++double: 1 ++idouble: 1 ++Test "tgamma (7.5)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (8)": ++double: 1 ++idouble: 1 ++Test "tgamma (8.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (9)": ++double: 1 ++idouble: 1 ++Test "tgamma (9.5)": ++double: 1 ++idouble: 1 ++ ++# y0 ++Test "y0 (0x1.3ffp+74)": ++double: 1 ++idouble: 1 ++Test "y0 (0x1.ff00000000002p+840)": ++double: 1 ++idouble: 1 ++Test "y0 (0x1p-10)": ++double: 1 ++idouble: 1 ++Test "y0 (0x1p-110)": ++double: 1 ++idouble: 1 ++Test "y0 (0x1p-20)": ++float: 1 ++ifloat: 1 ++Test "y0 (0x1p-30)": ++float: 1 ++ifloat: 1 ++Test "y0 (0x1p-40)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "y0 (0x1p-50)": ++float: 1 ++ifloat: 1 ++Test "y0 (0x1p-70)": ++double: 1 ++idouble: 1 ++Test "y0 (0x1p-80)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "y0 (1.0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "y0 (1.5)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "y0 (10.0)": ++float: 1 ++ifloat: 1 ++Test "y0 (8.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++# y1 ++Test "y1 (0.125)": ++double: 1 ++idouble: 1 ++Test "y1 (0x1.27e204p+99)": ++double: 1 ++idouble: 1 ++Test "y1 (0x1p-10)": ++double: 1 ++idouble: 1 ++Test "y1 (1.5)": ++float: 1 ++ifloat: 1 ++Test "y1 (10.0)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "y1 (2.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "y1 (8.0)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++# yn ++Test "yn (0, 1.0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "yn (0, 1.5)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "yn (0, 10.0)": ++float: 1 ++ifloat: 1 ++Test "yn (0, 8.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "yn (1, 0.125)": ++double: 1 ++idouble: 1 ++Test "yn (1, 1.5)": ++float: 1 ++ifloat: 1 ++Test "yn (1, 10.0)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "yn (1, 2.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "yn (1, 8.0)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "yn (10, 0.125)": ++double: 1 ++idouble: 1 ++Test "yn (10, 0.75)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "yn (10, 1.0)": ++double: 1 ++idouble: 1 ++Test "yn (10, 10.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "yn (10, 2.0)": ++double: 2 ++idouble: 2 ++Test "yn (3, 0.125)": ++double: 1 ++idouble: 1 ++Test "yn (3, 0.75)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "yn (3, 10.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "yn (3, 2.0)": ++double: 1 ++idouble: 1 ++ ++# Maximal error of functions: ++Function: "acos_downward": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "acos_towardzero": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "asin_downward": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "asin_towardzero": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "asin_upward": ++float: 1 ++ifloat: 1 ++ ++Function: "atan2": ++float: 1 ++ifloat: 1 ++ ++Function: "atanh": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "cacos": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Imaginary part of "cacos": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Real part of "cacosh": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Imaginary part of "cacosh": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Real part of "casin": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "casin": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Real part of "casinh": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Imaginary part of "casinh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Real part of "catan": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "catan": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Real part of "catanh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "catanh": ++float: 1 ++ifloat: 1 ++ ++Function: "cbrt": ++double: 1 ++idouble: 1 ++ ++Function: Real part of "ccos": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 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: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: Imaginary part of "cexp": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Real part of "clog": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "clog": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "clog10": ++double: 2 ++float: 2 ++idouble: 2 ++ifloat: 2 ++ ++Function: Imaginary part of "clog10": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "cos": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: "cos_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "cos_tonearest": ++float: 1 ++ifloat: 1 ++ ++Function: "cos_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "cos_upward": ++float: 2 ++ifloat: 2 ++ ++Function: "cosh_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "cosh_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "cpow": ++double: 2 ++float: 4 ++idouble: 2 ++ifloat: 4 ++ ++Function: Imaginary part of "cpow": ++float: 2 ++ifloat: 2 ++ ++Function: Real part of "csin": ++double: 1 ++float: 1 ++idouble: 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": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Real part of "ctan": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctan": ++double: 1 ++idouble: 1 ++ ++Function: Real part of "ctan_downward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: Imaginary part of "ctan_downward": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "ctan_tonearest": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctan_tonearest": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "ctan_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctan_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "ctan_upward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: Imaginary part of "ctan_upward": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Real part of "ctanh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctanh": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Real part of "ctanh_downward": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctanh_downward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: Real part of "ctanh_tonearest": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctanh_tonearest": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "ctanh_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctanh_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "ctanh_upward": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Imaginary part of "ctanh_upward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: "erf": ++double: 1 ++idouble: 1 ++ ++Function: "erfc": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "exp10": ++double: 1 ++idouble: 1 ++ ++Function: "exp_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "exp_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "exp_upward": ++float: 1 ++ifloat: 1 ++ ++Function: "expm1": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "gamma": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: "hypot": ++float: 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: 4 ++float: 5 ++idouble: 4 ++ifloat: 5 ++ ++Function: "lgamma": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: "log10": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: "log1p": ++float: 1 ++ifloat: 1 ++ ++Function: "pow": ++float: 1 ++ifloat: 1 ++ ++Function: "pow10": ++double: 1 ++idouble: 1 ++ ++Function: "pow_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "pow_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "pow_upward": ++float: 1 ++ifloat: 1 ++ ++Function: "sin_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "sin_tonearest": ++float: 1 ++ifloat: 1 ++ ++Function: "sin_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "sin_upward": ++float: 2 ++ifloat: 2 ++ ++Function: "sincos": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "sinh_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "sinh_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "tan": ++double: 1 ++idouble: 1 ++ ++Function: "tan_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "tan_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "tan_upward": ++float: 1 ++ifloat: 1 ++ ++Function: "tgamma": ++double: 4 ++float: 3 ++idouble: 4 ++ifloat: 3 ++ ++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-mips64 uClibc-git/test/math/libm-test-ulps-mips64 +--- uClibc-0.9.33.2/test/math/libm-test-ulps-mips64 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-git/test/math/libm-test-ulps-mips64 2014-07-25 20:36:11.517359363 +0200 +@@ -0,0 +1,9633 @@ ++# Begin of automatic generation ++ ++# acos_downward ++Test "acos_downward (-0)": ++float: 1 ++ifloat: 1 ++Test "acos_downward (-0.5)": ++double: 1 ++idouble: 1 ++Test "acos_downward (-1)": ++float: 1 ++ifloat: 1 ++Test "acos_downward (0)": ++float: 1 ++ifloat: 1 ++Test "acos_downward (0.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++# acos_towardzero ++Test "acos_towardzero (-0)": ++float: 1 ++ifloat: 1 ++Test "acos_towardzero (-0.5)": ++double: 1 ++idouble: 1 ++Test "acos_towardzero (-1)": ++float: 1 ++ifloat: 1 ++Test "acos_towardzero (0)": ++float: 1 ++ifloat: 1 ++Test "acos_towardzero (0.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++# asin_downward ++Test "asin_downward (-0.5)": ++double: 1 ++idouble: 1 ++Test "asin_downward (0.5)": ++double: 1 ++idouble: 1 ++Test "asin_downward (1.0)": ++float: 1 ++ifloat: 1 ++ ++# asin_towardzero ++Test "asin_towardzero (-0.5)": ++double: 1 ++idouble: 1 ++Test "asin_towardzero (-1.0)": ++float: 1 ++ifloat: 1 ++Test "asin_towardzero (0.5)": ++double: 1 ++idouble: 1 ++Test "asin_towardzero (1.0)": ++float: 1 ++ifloat: 1 ++ ++# asin_upward ++Test "asin_upward (-1.0)": ++float: 1 ++ifloat: 1 ++ ++# atan2 ++Test "atan2 (-0.00756827042671106339, -.001792735857538728036)": ++ildouble: 1 ++ldouble: 1 ++Test "atan2 (-0.75, -1.0)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "atan2 (-max_value, -min_value)": ++float: 1 ++ifloat: 1 ++Test "atan2 (0.75, -1.0)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "atan2 (1.390625, 0.9296875)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# atanh ++Test "atanh (0.75)": ++float: 1 ++ifloat: 1 ++ ++# cacos ++Test "Imaginary part of: cacos (+0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (+0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (+0 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (+0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (+0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (+0 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.0 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.0 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.0 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.0 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.0 + 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.0 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.0 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.0 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.0 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.0 - 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.25 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.25 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 + +0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 + 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 + 0x1.fp-129 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0.5 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 + 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 + 0x1p-112 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 + 0x1p-52 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.5 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 - 0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 - 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 - 0x1.fp-129 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0.5 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 - 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 - 0x1p-112 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 - 0x1p-52 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0.5 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x0.ffffffffffffffffp0 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x0.ffffffffffffffffp0 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (-0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (-0x1.0000000000000000000000000001p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.0000000000000000000000000001p0 + 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.0000000000000000000000000001p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.0000000000000000000000000001p0 - 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1.fp-100 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1.fp-100 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-10000 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-10000 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 + 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 - 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0x0.ffffffp0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1.fp-129 + 1.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0x0.ffffffp0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1.fp-129 - 1.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-16385 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-16385 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-16385 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-16385 + 1.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-16385 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-16385 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-16385 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1.fp-16385 - 1.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1.fp-30 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1.fp-30 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-105 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-105 + 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-105 - 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 + 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-112 - 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-113 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1p-113 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-113 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1p-113 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-23 + 0.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: cacos (-0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1p-23 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-23 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-23 - 0.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: cacos (-0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (-0x1p-23 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-23 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-52 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-52 + 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-52 - 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-63 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1p-63 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-63 + 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p-63 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1p-63 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-0x1p-63 - 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-0x1p500 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1p500 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1p5000 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0x1p5000 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-1.0 + 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-1.0 + 0x1p50 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-1.0 + 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-1.0 + 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-1.0 - 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-1.0 - 0x1p50 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (-1.0 - 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-1.0 - 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.0 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.0 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.0 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.0 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.0 + 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.0 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.0 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.0 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.0 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.0 - 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0.5 + +0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0.5 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0.5 + 0x1p-63 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0.5 - 0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0.5 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0.5 - 0x1p-63 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0.5 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffcp0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffcp0 + 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffcp0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffcp0 - 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffff8p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffff8p0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffff8p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffff8p0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x0.ffffffffffffffffp0 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x0.ffffffffffffffffp0 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x0.ffffffp0 + 0.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x0.ffffffp0 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacos (0x0.ffffffp0 - 0.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x0.ffffffp0 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (0x1.0000000000000000000000000001p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.0000000000000000000000000001p0 + 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.0000000000000000000000000001p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.0000000000000000000000000001p0 - 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x1.0000000000000002p0 + 0x1p-63 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: cacos (0x1.0000000000000002p0 - 0x1p-63 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: cacos (0x1.0000000000001p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x1.0000000000001p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x1.000002p0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x1.000002p0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0x1.fp-100 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x1.fp-100 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-10000 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-10000 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 + 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 - 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-16385 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-16385 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-16385 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-16385 + 1.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-16385 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-16385 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-16385 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-16385 - 1.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacos (0x1.fp16383 + 0x1.fp16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0x1p-112 + 0x0.ffffffffffffffffffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (0x1p-112 - 0x0.ffffffffffffffffffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-113 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-113 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: cacos (0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0x1p-23 + 0x1.000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: cacos (0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (0x1p-23 - 0x1.000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x1p-52 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x1p-52 + 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x1p-52 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x1p-52 - 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x1p-63 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-63 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-63 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0x1p-63 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (0x1p-63 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p-63 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p500 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p500 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p5000 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0x1p5000 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (1.0 + 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (1.0 + 0x1.fp-10 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (1.0 + 0x1.fp-100 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (1.0 + 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (1.0 + 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (1.0 + 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (1.0 - 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacos (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacos (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacos (1.0 - 0x1.fp-10 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacos (1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (1.0 - 0x1.fp-100 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (1.0 - 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (1.0 - 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (1.0 - 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++ ++# cacosh ++Test "Real part of: cacosh (+0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (+0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (+0 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (+0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (+0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (+0 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.0 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.0 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.0 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.0 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.0 + 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.0 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.0 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.0 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.0 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.0 - 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.25 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.25 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0.5 + +0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 + 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0.5 + 0x1.fp-129 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 + 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 + 0x1p-112 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 + 0x1p-52 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.5 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0.5 - 0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 - 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0.5 - 0x1.fp-129 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 - 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 - 0x1p-112 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 - 0x1p-52 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.5 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x0.ffffffffffffffffp0 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x0.ffffffffffffffffp0 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacosh (-0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: cacosh (-0x1.0000000000000000000000000001p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.0000000000000000000000000001p0 + 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.0000000000000000000000000001p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.0000000000000000000000000001p0 - 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-100 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-100 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-10000 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-10000 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 + 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 - 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x0.ffffffp0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 + 1.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x0.ffffffp0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-129 - 1.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-16385 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-16385 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-16385 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-16385 + 1.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-16385 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-16385 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-16385 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-16385 - 1.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-30 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1.fp-30 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 + 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-105 - 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 + 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-112 - 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-113 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-113 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1p-113 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-113 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 + 0.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: cacosh (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 - 0.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: cacosh (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-23 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 + 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-52 - 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 + 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-63 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1p-63 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 + 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 - 0.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p-63 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1p-63 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0x1p-63 - 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-0x1p500 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1p500 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1p5000 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0x1p5000 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-1.0 + 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-1.0 + 0x1p50 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-1.0 + 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-1.0 + 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-1.0 - 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-1.0 - 0x1p50 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (-1.0 - 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-1.0 - 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0.0 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0.0 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0.0 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0.0 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0.0 + 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0.0 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0.0 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0.0 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0.0 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0.0 - 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0.5 + +0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0.5 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 0x1p-63 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0.5 - 0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0.5 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 0x1p-63 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffcp0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffcp0 + 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffcp0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffcp0 - 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffff8p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffff8p0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffff8p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffff8p0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x0.ffffffffffffffffp0 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x0.ffffffffffffffffp0 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.0000000000000000000000000001p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.0000000000000000000000000001p0 + 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.0000000000000000000000000001p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.0000000000000000000000000001p0 - 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x1.0000000000000002p0 + 0x1p-63 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: cacosh (0x1.0000000000000002p0 - 0x1p-63 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: cacosh (0x1.0000000000001p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x1.0000000000001p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x1.000002p0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x1.000002p0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x1.fp-100 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x1.fp-100 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-10000 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-10000 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 + 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 - 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-16385 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-16385 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-16385 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-16385 + 1.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-16385 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-16385 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-16385 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-16385 - 1.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (0x1.fp16383 + 0x1.fp16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0x1p-112 + 0x0.ffffffffffffffffffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0x1p-112 - 0x0.ffffffffffffffffffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-113 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-113 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: cacosh (0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0x1p-23 + 0x1.000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: cacosh (0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (0x1p-23 - 0x1.000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x1p-52 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x1p-52 + 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x1p-52 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (0x1p-52 - 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0x1p-63 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-63 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-63 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (0x1p-63 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-63 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p-63 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p500 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p500 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p5000 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (0x1p5000 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (1.0 + 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (1.0 + 0x1.fp-10 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacosh (1.0 + 0x1.fp-100 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (1.0 + 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (1.0 + 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (1.0 + 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (1.0 - 0.25 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cacosh (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: cacosh (1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (1.0 - 0x1.fp-10 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cacosh (1.0 - 0x1.fp-100 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (1.0 - 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (1.0 - 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (1.0 - 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++ ++# casin ++Test "Imaginary part of: casin (+0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (+0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (+0 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (+0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (+0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (+0 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.0 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.0 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.0 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.0 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.0 + 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.0 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.0 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.0 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.0 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.0 - 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0.5 + 0x1p-112 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0.5 + 0x1p-23 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.5 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0.5 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0.5 - 0x1p-112 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0.5 - 0x1p-23 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.5 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0.5 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x0.fffffffffffff8p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x0.fffffffffffff8p0 + 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-0x0.fffffffffffff8p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x0.fffffffffffff8p0 - 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x0.ffffffffffffffffffffffffffff8p0 + 0x1p-112 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x0.ffffffffffffffffffffffffffff8p0 - 0x1p-112 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x0.ffffffffffffffffp0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x0.ffffffffffffffffp0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x0.ffffffffffffffffp0 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x0.ffffffffffffffffp0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x0.ffffffffffffffffp0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x0.ffffffffffffffffp0 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x0.ffffffp0 + 0x1p-23 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: casin (-0x0.ffffffp0 - 0x1p-23 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: casin (-0x1.0000000000000000000000000001p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.0000000000000000000000000001p0 + 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.0000000000000000000000000001p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.0000000000000000000000000001p0 - 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x1.fp-10 + 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-0x1.fp-10 - 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-10000 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-10000 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x1.fp-1025 + 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 + 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x1.fp-1025 - 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 - 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-16385 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-16385 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-16385 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-16385 + 1.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-16385 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-16385 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-16385 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-16385 - 1.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x1.fp-30 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x1.fp-30 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (-0x1p-113 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p-113 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x1p-113 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p-113 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x1p-23 + 0.5 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: casin (-0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: casin (-0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-0x1p-23 + 0x1.000002p0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x1p-23 - 0.5 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: casin (-0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: casin (-0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (-0x1p-23 - 0x1.000002p0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x1p-52 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x1p-52 + 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x1p-52 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x1p-52 - 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-63 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x1p-63 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p-63 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-0x1p-63 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-0x1p-63 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p-63 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p500 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p500 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p5000 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0x1p5000 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-1.0 + 0.25 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-1.0 + 0x1.fp-129 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-1.0 + 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-1.0 + 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-1.0 + 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-1.0 - 0.25 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (-1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (-1.0 - 0x1.fp-129 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-1.0 - 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-1.0 - 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-1.0 - 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.0 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.0 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.0 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.0 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.0 + 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.0 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.0 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.0 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.0 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.0 - 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.25 + 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.25 - 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 + 0x1p-105 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0.5 + 0x1p-112 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.5 + 0x1p-112 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0.5 + 0x1p-23 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.5 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.5 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0.5 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.5 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0.5 - 0x1p-105 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0.5 - 0x1p-112 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.5 - 0x1p-112 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0.5 - 0x1p-23 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.5 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.5 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0.5 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0.5 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: casin (0x0.fffffffffffff8p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x0.fffffffffffff8p0 + 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x0.fffffffffffff8p0 + 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (0x0.fffffffffffff8p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x0.fffffffffffff8p0 - 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x0.fffffffffffff8p0 - 0x1p-52 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x0.ffffffffffffffffffffffffffff8p0 + 0x1p-112 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x0.ffffffffffffffffffffffffffff8p0 - 0x1p-112 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x0.ffffffffffffffffp0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x0.ffffffffffffffffp0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x0.ffffffffffffffffp0 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x0.ffffffffffffffffp0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x0.ffffffffffffffffp0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x0.ffffffffffffffffp0 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x0.ffffffp0 + 0x1p-23 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x0.ffffffp0 + 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: casin (0x0.ffffffp0 - 0x1p-23 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x0.ffffffp0 - 0x1p-23 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: casin (0x1.0000000000000000000000000001p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.0000000000000000000000000001p0 + 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.0000000000000000000000000001p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.0000000000000000000000000001p0 - 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.000002p0 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.000002p0 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x1.fp-10 + 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-10 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (0x1.fp-10 - 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-10 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp-100 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-100 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1000 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1000 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-10000 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-10000 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x1.fp-1025 + 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 + 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x1.fp-1025 - 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 - 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-1025 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-129 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-129 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-129 + 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-129 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-129 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-129 - 1.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-16385 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-16385 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-16385 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-16385 + 1.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-16385 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-16385 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-16385 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-16385 - 1.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x1.fp-30 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-30 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x1.fp-30 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp-30 - 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casin (0x1.fp16383 + 0x1.fp16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p-105 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p-105 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p-112 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-112 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casin (0x1p-113 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p-113 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x1p-113 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p-113 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x1p-23 + 0.5 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: casin (0x1p-23 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: casin (0x1p-23 + 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (0x1p-23 + 0x1.000002p0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x1p-23 - 0.5 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: casin (0x1p-23 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: casin (0x1p-23 - 0x0.ffffffp0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casin (0x1p-23 - 0x1.000002p0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x1p-52 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p-52 + 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x1p-52 + 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x1p-52 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p-52 - 0.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x1p-52 - 0x1.0000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p-63 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-63 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x1p-63 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p-63 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p-63 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0x1p-63 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0x1p-63 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p-63 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p500 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p500 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p5000 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (0x1p5000 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (1.0 + 0.25 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (1.0 + 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (1.0 + 0x1.fp-129 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (1.0 + 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (1.0 + 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (1.0 + 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (1.0 - 0.25 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (1.0 - 0.5 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (1.0 - 0x1.fp-129 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (1.0 - 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (1.0 - 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (1.0 - 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++ ++# casinh ++Test "Imaginary part of: casinh (-0.0 + 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0.0 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.0 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0.0 - 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0.0 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.0 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0.25 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0.25 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.5 + +0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.5 + 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.5 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.5 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.5 + 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: casinh (-0.5 + 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: casinh (-0.5 + 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0.5 + 0x1p-52 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.5 + 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (-0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.5 - 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.5 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.5 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.5 - 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: casinh (-0.5 - 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: casinh (-0.5 - 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0.5 - 0x1p-52 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.5 - 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (-0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (-0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (-0x0.fffffffffffff8p0 + 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x0.fffffffffffff8p0 - 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x0.ffffffffffffffffffffffffffcp0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x0.ffffffffffffffffffffffffffcp0 + 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x0.ffffffffffffffffffffffffffcp0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x0.ffffffffffffffffffffffffffcp0 - 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x0.ffffffffffffffffp0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x0.ffffffffffffffffp0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x0.ffffffffffffffffp0 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x0.ffffffffffffffffp0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x0.ffffffffffffffffp0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x0.ffffffffffffffffp0 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x0.ffffffp0 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x0.ffffffp0 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1.0000000000000000000000000001p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000000000000000000001p0 + 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1.0000000000000000000000000001p0 + 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000000000000000000001p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000000000000000000001p0 - 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1.0000000000000000000000000001p0 - 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000000002p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000000002p0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000000002p0 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1.0000000000000002p0 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000000002p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000000002p0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000000002p0 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1.0000000000000002p0 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000001p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000001p0 + 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1.0000000000001p0 + 0x1p-52 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000001p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.0000000000001p0 - 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1.0000000000001p0 - 0x1p-52 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1.000002p0 + 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1.000002p0 - 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.fp-10 + 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.fp-10 - 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1.fp-1025 + 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1.fp-1025 - 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.fp-129 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (-0x1.fp-129 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.fp-129 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (-0x1.fp-129 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.fp-30 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1.fp-30 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-105 + 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-105 - 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-112 + 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1p-112 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1p-112 + 0x0.ffffffffffffffffffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-112 - 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1p-112 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1p-112 - 0x0.ffffffffffffffffffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-113 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-113 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-23 + 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1p-23 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-23 + 0x0.ffffffp0 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: casinh (-0x1p-23 + 0x0.ffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-23 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-23 - 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-0x1p-23 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-23 - 0x0.ffffffp0 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: casinh (-0x1p-23 - 0x0.ffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-23 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-52 + 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-52 - 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (-0x1p-63 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-63 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-63 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p-63 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p500 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p500 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p5000 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0x1p5000 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 + +0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 + 0.25 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 + 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-1.0 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (-1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-100 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-1000 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-10000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-129 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1.fp-30 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-1.0 + 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 + 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 - 0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 - 0.25 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 - 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-1.0 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (-1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-100 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-1000 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-10000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-129 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1.fp-30 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (-1.0 - 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 - 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.5 + +0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.5 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.5 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.5 - 0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.5 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.5 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0.0 + 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0.0 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.0 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0.0 - 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0.0 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.0 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0.25 + 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0.25 - 1.0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.5 + +0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.5 + 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.5 + 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.5 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.5 + 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: casinh (0.5 + 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: casinh (0.5 + 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0.5 + 0x1p-52 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.5 + 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (0.5 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.5 - 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.5 - 0x1.fp-129 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.5 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.5 - 0x1p-105 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0x1p-112 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 0x1p-23 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: casinh (0.5 - 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: casinh (0.5 - 0x1p-52 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0.5 - 0x1p-52 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.5 - 0x1p-63 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: casinh (0.5 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: casinh (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x0.fffffffffffff8p0 + 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x0.fffffffffffff8p0 - 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x0.ffffffffffffffffffffffffffcp0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x0.ffffffffffffffffffffffffffcp0 + 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x0.ffffffffffffffffffffffffffcp0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x0.ffffffffffffffffffffffffffcp0 - 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x0.ffffffffffffffffp0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x0.ffffffffffffffffp0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x0.ffffffffffffffffp0 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x0.ffffffffffffffffp0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x0.ffffffffffffffffp0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x0.ffffffffffffffffp0 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x0.ffffffp0 + 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x0.ffffffp0 - 0x1p-23 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1.0000000000000000000000000001p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000000000000000000001p0 + 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1.0000000000000000000000000001p0 + 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000000000000000000001p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000000000000000000001p0 - 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1.0000000000000000000000000001p0 - 0x1p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000000002p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000000002p0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000000002p0 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1.0000000000000002p0 + 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000000002p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000000002p0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000000002p0 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1.0000000000000002p0 - 0x1p-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000001p0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000001p0 + 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1.0000000000001p0 + 0x1p-52 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000001p0 - 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.0000000000001p0 - 0x1.fp-1025 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1.0000000000001p0 - 0x1p-52 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1.000002p0 + 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1.000002p0 - 0x1p-23 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.fp-10 + 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.fp-10 - 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1.fp-1025 + 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1.fp-1025 - 0x0.fffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.fp-129 + 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (0x1.fp-129 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.fp-129 - 0.5 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (0x1.fp-129 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.fp-30 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.fp-30 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1.fp16383 + 0x1.fp16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-105 + 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-105 - 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-112 + 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1p-112 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1p-112 + 0x0.ffffffffffffffffffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-112 - 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1p-112 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1p-112 - 0x0.ffffffffffffffffffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-113 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-113 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-23 + 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1p-23 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-23 + 0x0.ffffffp0 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: casinh (0x1p-23 + 0x0.ffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-23 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-23 - 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0x1p-23 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-23 - 0x0.ffffffp0 i)": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: casinh (0x1p-23 - 0x0.ffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-23 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-52 + 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-52 - 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: casinh (0x1p-63 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-63 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-63 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p-63 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p500 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p500 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p5000 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0x1p5000 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 + +0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 + 0.25 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 + 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (1.0 + 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (1.0 + 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-100 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-1000 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-10000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-129 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 + 0x1.fp-30 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (1.0 + 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 + 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 + 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 - 0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 - 0.25 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 - 0.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (1.0 - 0.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: casinh (1.0 - 0x1.fp-10 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-100 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-1000 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-10000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-129 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 - 0x1.fp-30 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (1.0 - 0x1.fp-30 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 - 0x1p500 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 - 0x1p5000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.5 + +0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.5 + 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.5 + 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.5 + 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.5 - 0 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.5 - 0x1.fp-1025 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.5 - 0x1.fp-129 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.5 - 0x1.fp-16385 i)": ++ildouble: 1 ++ldouble: 1 ++ ++# catan ++Test "Imaginary part of: catan (-0x0.fffffffffffff8p0 + 0x1p-27 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catan (-0x0.ffffffffffffffffffffffffffff8p0 + 0x1p-16382 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (-0x0.ffffffffffffffffffffffffffff8p0 + 0x1p-57 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (-0x0.ffffffffffffffffffffffffffff8p0 - 0x1p-16382 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (-0x0.ffffffp0 + 0x1p-126 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (-0x0.ffffffp0 + 0x1p-13 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (-0x0.ffffffp0 - 0x1p-126 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (-0x1.0000000000000000000000000001p0 + 0x1p-16382 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (-0x1.0000000000000000000000000001p0 - 0x1p-16382 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (-0x1.0000000000000000000000000001p0 - 0x1p-57 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (-0x1.0000000000001p0 - 0x1p-27 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catan (-0x1.000002p0 + 0x1p-126 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (-0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1.000002p0 - 0x1p-126 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (-0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1.000002p0 - 0x1p-13 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1.fp1023 - 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1.fp127 - 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1.fp16383 + 0x1.fp16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (-0x1.fp16383 - 0x1.fp16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (-0x1p-1020 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (-0x1p-1020 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catan (-0x1p-13 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1p-13 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-0x1p-13 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-16380 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (-0x1p-16380 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (-0x1p-33 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (-0x1p-33 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (-0x1p-33 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (-0x1p-33 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (-0x1p-54 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-54 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-57 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (-0x1p-57 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (-1.0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (-1.0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (-2 - 3 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0.75 + 1.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (0x0.fffffffffffff8p0 + 0x1p-27 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catan (0x0.ffffffffffffffffffffffffffff8p0 + 0x1p-16382 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (0x0.ffffffffffffffffffffffffffff8p0 + 0x1p-57 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (0x0.ffffffffffffffffffffffffffff8p0 - 0x1p-16382 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (0x0.ffffffp0 + 0x1p-126 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (0x0.ffffffp0 + 0x1p-13 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (0x0.ffffffp0 - 0x1p-126 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (0x1.0000000000000000000000000001p0 + 0x1p-16382 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (0x1.0000000000000000000000000001p0 - 0x1p-16382 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (0x1.0000000000000000000000000001p0 - 0x1p-57 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (0x1.0000000000001p0 - 0x1p-27 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catan (0x1.000002p0 + 0x1p-126 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1.000002p0 - 0x1p-126 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1.000002p0 - 0x1p-13 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1.fp1023 - 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1.fp127 - 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1.fp16383 + 0x1.fp16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (0x1.fp16383 - 0x1.fp16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (0x1p-1020 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catan (0x1p-1020 - 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catan (0x1p-13 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1p-13 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (0x1p-13 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-16380 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (0x1p-16380 - 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (0x1p-33 + 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (0x1p-33 + 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (0x1p-33 - 0x0.ffffffffffffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (0x1p-33 - 0x1.0000000000000002p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catan (0x1p-54 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-54 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-57 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0x1p-57 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catan (1.0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catan (1.0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# catanh ++Test "Imaginary part of: catanh (-0x0.ffffffffffffffffp0 + 0x1p-33 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (-0x0.ffffffffffffffffp0 - 0x1p-33 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (-0x1.0000000000000002p0 + 0x1p-33 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (-0x1.0000000000000002p0 - 0x1p-33 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (-0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (-0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (-0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-0x1.fp1023 - 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-0x1.fp127 - 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-0x1.fp16383 + 0x1.fp16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (-0x1.fp16383 - 0x1.fp16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (-0x1p-126 + 0x0.ffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (-0x1p-126 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (-0x1p-126 - 0x0.ffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (-0x1p-126 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (-0x1p-13 + 0x1.000002p0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (-0x1p-13 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (-0x1p-13 + 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (-0x1p-13 - 0x1.000002p0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (-0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (-0x1p-13 - 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (-0x1p-16382 + 0x0.ffffffffffffffffffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (-0x1p-16382 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (-0x1p-16382 - 0x0.ffffffffffffffffffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (-0x1p-16382 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (-0x1p-27 + 0x1.0000000000001p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-0x1p-27 - 0x1.0000000000001p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (-0x1p-57 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (-0x1p-57 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (-1.0 + 0x1p-1020 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (-1.0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 + 0x1p-16380 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (-1.0 + 0x1p-54 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 + 0x1p-57 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 - 0x1p-1020 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (-1.0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 - 0x1p-16380 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (-1.0 - 0x1p-54 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-1.0 - 0x1p-57 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (-2 - 3 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (0.75 + 1.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0.75 + 1.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0x0.ffffffffffffffffp0 + 0x1p-33 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0x0.ffffffffffffffffp0 - 0x1p-33 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0x1.0000000000000002p0 + 0x1p-33 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0x1.0000000000000002p0 - 0x1p-33 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0x1.000002p0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1.000002p0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (0x1.fp1023 + 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (0x1.fp1023 - 0x1.fp1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (0x1.fp127 + 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (0x1.fp127 - 0x1.fp127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (0x1.fp16383 + 0x1.fp16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (0x1.fp16383 - 0x1.fp16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0x1p-126 + 0x0.ffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0x1p-126 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0x1p-126 - 0x0.ffffffp0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0x1p-126 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (0x1p-13 + 0x0.ffffffp0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0x1p-13 + 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1p-13 + 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (0x1p-13 - 0x0.ffffffp0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0x1p-13 - 0x1.000002p0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: catanh (0x1p-13 - 1.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0x1p-16382 + 0x0.ffffffffffffffffffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (0x1p-16382 + 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0x1p-16382 - 0x0.ffffffffffffffffffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (0x1p-16382 - 0x1.0000000000000000000000000001p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (0x1p-27 + 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (0x1p-27 - 0x0.fffffffffffff8p0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: catanh (0x1p-57 + 0x0.ffffffffffffffffffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (0x1p-57 - 0x0.ffffffffffffffffffffffffffff8p0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (1.0 + 0x1p-1020 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (1.0 + 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 + 0x1p-16380 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (1.0 + 0x1p-54 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 + 0x1p-57 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 - 0x1p-1020 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: catanh (1.0 - 0x1p-13 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 - 0x1p-16380 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: catanh (1.0 - 0x1p-54 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: catanh (1.0 - 0x1p-57 i)": ++float: 1 ++ifloat: 1 ++ ++# cbrt ++Test "cbrt (-0.001)": ++ildouble: 1 ++ldouble: 1 ++Test "cbrt (-27.0)": ++double: 1 ++idouble: 1 ++Test "cbrt (0.75)": ++double: 1 ++idouble: 1 ++Test "cbrt (0.9921875)": ++double: 1 ++idouble: 1 ++ ++# ccos ++Test "Imaginary part of: ccos (-0.75 + 11357.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (-0.75 + 710.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccos (-0.75 + 89.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (-0.75 + 89.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (-0.75 - 11357.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (-0.75 - 710.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccos (-0.75 - 89.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (-0.75 - 89.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccos (-2 - 3 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccos (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (0.75 + 11357.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (0.75 + 710.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccos (0.75 + 89.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (0.75 + 89.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (0.75 - 11357.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (0.75 - 710.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccos (0.75 - 89.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (0.75 - 89.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (0x1p-1074 + 1440 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccos (0x1p-16434 + 22730 i)": ++ildouble: 1 ++ldouble: 1 ++ ++# ccosh ++Test "Imaginary part of: ccosh (-11357.25 + 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (-11357.25 - 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccosh (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (-710.5 + 0.75 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (-710.5 - 0.75 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccosh (-89.5 + 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (-89.5 + 0.75 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccosh (-89.5 - 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (-89.5 - 0.75 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccosh (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (11357.25 + 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (11357.25 - 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccosh (22730 + 0x1p-16434 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (710.5 + 0.75 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (710.5 - 0.75 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccosh (89.5 + 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (89.5 + 0.75 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccosh (89.5 - 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (89.5 - 0.75 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# cexp ++Test "Imaginary part of: cexp (-10000 + 0x1p16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cexp (-2.0 - 3.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cexp (-2.0 - 3.0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cexp (-720 + 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cexp (-95 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cexp (0.75 + 1.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cexp (1440 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cexp (22730 + 0x1p-16434 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cexp (50 + 0x1p127 i)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cexp (50 + 0x1p127 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (500 + 0x1p1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (709.8125 + 0.75 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cexp (709.8125 + 0.75 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cexp (88.75 + 0.75 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cexp (88.75 + 0.75 i)": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++# clog ++Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1.fp+127 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1.fp+127 - 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1.fp+16383 + 0x1p-16445 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (-0x1.fp+16383 + 0x1p-16494 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (-0x1.fp+16383 - 0x1p-16445 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (-0x1.fp+16383 - 0x1p-16494 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (-0x1p-149 + 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog (-0x1p-149 + 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1p-149 - 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1p-16445 + 0x1.fp+16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (-0x1p-16445 - 0x1.fp+16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (-0x1p-16494 + 0x1.fp+16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (-0x1p-16494 - 0x1.fp+16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog (0x1.000566p0 + 0x1.234p-10 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1.fp+127 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1.fp+16383 + 0x1.fp+16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1.fp+16383 + 0x1p-16445 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1.fp+16383 + 0x1p-16494 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1.fp+16383 - 0x1p-16445 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1.fp+16383 - 0x1p-16494 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog (0x1p-147 + 0x1p-147 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1p-149 + 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1p-16445 + 0x1.fp+16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1p-16445 - 0x1.fp+16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1p-16494 + 0x1.fp+16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1p-16494 - 0x1.fp+16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0x2818p-15 + 0x798fp-15 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0x298c62cb546588a7p-63 + 0x7911b1dfcc4ecdaep-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0x2ede88p-23 + 0x771c3fp-23 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0x3f96469050f650869c2p-75 + 0x6f16b2c9c8b05988335p-75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0x55cb6d0c83af5p-55 + 0x7fe33c0c7c4e90p-55 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0x659feap-24 + 0xeaf6f9p-24 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0x6771f22c64ed551b857c128b4cp-105 + 0x1f570e7a13cc3cf2f44fd793ea1p-105 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0x6b10b4f3520217b6p-64 + 0xe8893cbb449253a1p-64 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x8ecbf810c4ae6p-52 + 0xd479468b09a37p-52 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0x9b57bp-20 + 0xcb7b4p-20 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0xdb85c467ee2aadd5f425fe0f4b8dp-114 + 0x3e83162a0f95f1dcbf97dddf410eap-114 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0xfd95243681c055c2632286921092p-113 + 0x1bccabcd29ca2152860ec29e34ef7p-113 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (1.0 + 0x1.234566p-10 i)": ++float: 1 ++ifloat: 1 ++ ++# clog10 ++Test "Imaginary part of: clog10 (-0 + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-0 - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)": ++double: 2 ++idouble: 2 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i)": ++double: 2 ++idouble: 2 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+1023 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+1023 - 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+127 + 0x1p-149 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+127 - 0x1p-149 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-0x1p-1074 + 0x1.fp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1p-1074 - 0x1.fp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1p-149 + 0x1.fp+127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1p-149 - 0x1.fp+127 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-1.0 + 0x1.234566p-20 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (-2 - 3 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (-2 - 3 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (-3 + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-3 - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf + 0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf + 1 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf + inf i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-inf - 0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf - 1 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0 + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0 - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0.75 + 1.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x0.fffffffffffff8p0 + 0x0.fffffffffffff8p-1000 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x0.ffffffp0 + 0x0.ffffffp-100 i)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x1.00000000000000123456789abcp0 + 0x1.23456789p-1000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x1.00000000000000123456789abcp0 + 0x1.23456789p-1000 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x1.00000000000000123456789abcp0 + 0x1.23456789p-60 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-10 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-10 i)": ++double: 1 ++idouble: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-100 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-100 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x1.234566p-30 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x1.234566p-50 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x1.234566p-60 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x1.234566p-60 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x1.fp+16383 + 0x1.fp+16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x1.fp+16383 + 0x1p+16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x1415bcaf2105940d49a636e98ae59p-115 + 0x7e6a150adfcd1b0921d44b31f40f4p-115 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x15cfbd1990d1ffp-53 + 0x176a3973e09a9ap-53 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x164c74eea876p-45 + 0x16f393482f77p-45 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1a6p-10 + 0x3a5p-10 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x1df515eb171a808b9e400266p-95 + 0x7c71eb0cd4688dfe98581c77p-95 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x1df515eb171a808b9e400266p-95 + 0x7c71eb0cd4688dfe98581c77p-95 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1073 + 0x1p-1073 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1074 + 0x1.fp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1074 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1074 - 0x1.fp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-149 + 0x1.fp+127 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-149 - 0x1.fp+127 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-509 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-510 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-511 + 1.0 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-61 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-62 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-63 + 1.0 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x2818p-15 + 0x798fp-15 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x2818p-15 + 0x798fp-15 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x2dd46725bp-35 + 0x7783a1284p-35 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x3f96469050f650869c2p-75 + 0x6f16b2c9c8b05988335p-75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x4d4ep-15 + 0x6605p-15 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x4d9c37e2b5cb4533p-63 + 0x65c98be2385a042ep-63 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x55cb6d0c83af5p-55 + 0x7fe33c0c7c4e90p-55 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x602fd5037c4792efp-64 + 0xed3e2086dcca80b8p-64 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x6241ef0da53f539f02fad67dabp-106 + 0x3fb46641182f7efd9caa769dac0p-106 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x659feap-24 + 0xeaf6f9p-24 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x659feap-24 + 0xeaf6f9p-24 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x6b10b4f3520217b6p-64 + 0xe8893cbb449253a1p-64 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x9b57bp-20 + 0xcb7b4p-20 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0xdb85c467ee2aadd5f425fe0f4b8dp-114 + 0x3e83162a0f95f1dcbf97dddf410eap-114 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0xf2p-10 + 0x3e3p-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0xf2p-10 + 0x3e3p-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0xfd95243681c055c2632286921092p-113 + 0x1bccabcd29ca2152860ec29e34ef7p-113 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: clog10 (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (3 + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (3 - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (inf + inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (inf - inf i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++# cos ++Test "cos (0x1p+120)": ++float: 1 ++ifloat: 1 ++Test "cos (0x1p+127)": ++float: 1 ++ifloat: 1 ++Test "cos (M_PI_6l * 2.0)": ++double: 1 ++idouble: 1 ++Test "cos (M_PI_6l * 4.0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# cos_downward ++Test "cos_downward (1)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (2)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (3)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (4)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (5)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (7)": ++float: 1 ++ifloat: 1 ++Test "cos_downward (8)": ++float: 1 ++ifloat: 1 ++ ++# cos_tonearest ++Test "cos_tonearest (7)": ++float: 1 ++ifloat: 1 ++ ++# cos_towardzero ++Test "cos_towardzero (2)": ++float: 1 ++ifloat: 1 ++Test "cos_towardzero (3)": ++float: 1 ++ifloat: 1 ++Test "cos_towardzero (5)": ++float: 1 ++ifloat: 1 ++Test "cos_towardzero (7)": ++float: 1 ++ifloat: 1 ++Test "cos_towardzero (8)": ++float: 1 ++ifloat: 1 ++ ++# cos_upward ++Test "cos_upward (10)": ++float: 1 ++ifloat: 1 ++Test "cos_upward (6)": ++float: 1 ++ifloat: 1 ++Test "cos_upward (7)": ++float: 1 ++ifloat: 1 ++Test "cos_upward (9)": ++float: 2 ++ifloat: 2 ++ ++# cosh_downward ++Test "cosh_downward (22)": ++float: 1 ++ifloat: 1 ++Test "cosh_downward (23)": ++float: 1 ++ifloat: 1 ++Test "cosh_downward (24)": ++float: 1 ++ifloat: 1 ++ ++# cosh_tonearest ++Test "cosh_tonearest (22)": ++ildouble: 1 ++ldouble: 1 ++ ++# cosh_towardzero ++Test "cosh_towardzero (22)": ++float: 1 ++ifloat: 1 ++Test "cosh_towardzero (23)": ++float: 1 ++ifloat: 1 ++Test "cosh_towardzero (24)": ++float: 1 ++ifloat: 1 ++ ++# cpow ++Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i)": ++double: 1 ++float: 4 ++idouble: 1 ++ifloat: 4 ++ildouble: 4 ++ldouble: 4 ++Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i)": ++double: 2 ++float: 3 ++idouble: 2 ++ifloat: 3 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: cpow (2 + 0 i, 10 + 0 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: cpow (2 + 3 i, 4 + 0 i)": ++double: 1 ++float: 4 ++idouble: 1 ++ifloat: 4 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i)": ++float: 2 ++ifloat: 2 ++ ++# csin ++Test "Real part of: csin (-0.75 + 11357.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (-0.75 + 710.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (-0.75 + 89.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csin (-0.75 + 89.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (-0.75 - 11357.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (-0.75 - 710.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (-0.75 - 89.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csin (-0.75 - 89.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csin (-2 - 3 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0.75 + 1.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0.75 + 11357.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0.75 + 710.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0.75 + 89.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csin (0.75 + 89.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0.75 - 11357.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0.75 - 710.5 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0.75 - 89.5 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csin (0.75 - 89.5 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0x1p-1074 + 1440 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: csin (0x1p-16434 + 22730 i)": ++ildouble: 1 ++ldouble: 1 ++ ++# csinh ++Test "Imaginary part of: csinh (-11357.25 + 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (-11357.25 - 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csinh (-2 - 3 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (-2 - 3 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (-710.5 + 0.75 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (-710.5 - 0.75 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csinh (-89.5 + 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (-89.5 + 0.75 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csinh (-89.5 - 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (-89.5 - 0.75 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csinh (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: csinh (0.75 + 1.25 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: csinh (11357.25 + 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (11357.25 - 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (1440 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (22730 + 0x1p-16434 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (710.5 + 0.75 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (710.5 - 0.75 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csinh (89.5 + 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (89.5 + 0.75 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csinh (89.5 - 0.75 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (89.5 - 0.75 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# csqrt ++Test "Real part of: csqrt (-0x1.0000000000000000000000000001p-16382 - 0x1.0000000000000000000000000001p-16382 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csqrt (-0x1.0000000000000002p-16382 - 0x1.0000000000000002p-16382 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (-0x1.0000000000000002p-16382 - 0x1.0000000000000002p-16382 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csqrt (-0x1.0000000000001p-1022 - 0x1.0000000000001p-1022 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: csqrt (-2 + 3 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csqrt (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0.75 + 1.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1.0000000000000000000000000001p-16382 + 0x1.0000000000000000000000000001p-16382 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csqrt (0x1.0000000000000002p-16382 + 0x1.0000000000000002p-16382 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1.0000000000000002p-16382 + 0x1.0000000000000002p-16382 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1.0000000000001p-1022 + 0x1.0000000000001p-1022 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1.000002p-126 + 0x1.000002p-126 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i)": ++float: 1 ++ifloat: 1 ++Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1p+16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1p-16440 + 0x1p-16441 i)": ++ildouble: 1 ++ldouble: 1 ++ ++# ctan ++Test "Real part of: ctan (-2 - 3 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctan (-2 - 3 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctan (0.75 + 1.25 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctan (0.75 + 1.25 i)": ++double: 1 ++idouble: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctan (0x1p1023 + 1 i)": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ctan (0x1p1023 + 1 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctan (0x1p127 + 1 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctan (0x1p127 + 1 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctan (0x1p16383 + 1 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctan (0x1p16383 + 1 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctan (0x3.243f6cp-1 + 0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctan (1 + 355 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctan (1 + 365 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctan (1 + 45 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctan (1 + 47 i)": ++ildouble: 1 ++ldouble: 1 ++ ++# ctan_downward ++Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++ ++# ctan_tonearest ++Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x1p-1074 i)": ++ildouble: 3 ++ldouble: 3 ++Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x1p-1074 i)": ++ildouble: 3 ++ldouble: 3 ++Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++# ctan_towardzero ++Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i)": ++float: 1 ++ifloat: 1 ++ ++# ctan_upward ++Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x1p-1074 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++# ctanh ++Test "Real part of: ctanh (-2 - 3 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh (-2 - 3 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh (0 + 0x3.243f6cp-1 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctanh (0 + pi/4 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctanh (0.75 + 1.25 i)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh (0.75 + 1.25 i)": ++float: 2 ++ifloat: 2 ++Test "Real part of: ctanh (1 + 0x1p1023 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctanh (1 + 0x1p1023 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: ctanh (1 + 0x1p127 i)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctanh (1 + 0x1p127 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctanh (1 + 0x1p16383 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctanh (1 + 0x1p16383 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctanh (355 + 1 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctanh (365 + 1 i)": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctanh (45 + 1 i)": ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctanh (47 + 1 i)": ++ildouble: 1 ++ldouble: 1 ++ ++# ctanh_downward ++Test "Real part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++# ctanh_tonearest ++Test "Real part of: ctanh_tonearest (0x1p-1074 + 0x1.921fb54442d18p+0 i)": ++ildouble: 3 ++ldouble: 3 ++Test "Imaginary part of: ctanh_tonearest (0x1p-1074 + 0x1.921fb54442d18p+0 i)": ++ildouble: 3 ++ldouble: 3 ++Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctanh_tonearest (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)": ++ildouble: 1 ++ldouble: 1 ++ ++# ctanh_towardzero ++Test "Real part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i)": ++float: 1 ++ifloat: 1 ++ ++# ctanh_upward ++Test "Imaginary part of: ctanh_upward (0x1p-1074 + 0x1.921fb54442d18p+0 i)": ++double: 1 ++idouble: 1 ++Test "Real part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "Imaginary part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++# erf ++Test "erf (1.25)": ++double: 1 ++idouble: 1 ++ ++# erfc ++Test "erfc (0x1.f7303cp+1)": ++double: 1 ++idouble: 1 ++Test "erfc (0x1.ffa002p+2)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "erfc (0x1.ffffc8p+2)": ++ildouble: 1 ++ldouble: 1 ++Test "erfc (2.0)": ++double: 1 ++idouble: 1 ++Test "erfc (27.0)": ++ildouble: 1 ++ldouble: 1 ++Test "erfc (4.125)": ++double: 1 ++idouble: 1 ++ ++# exp10 ++Test "exp10 (-1)": ++double: 1 ++idouble: 1 ++Test "exp10 (-305)": ++double: 1 ++idouble: 1 ++Test "exp10 (-36)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "exp10 (3)": ++double: 1 ++idouble: 1 ++Test "exp10 (36)": ++double: 1 ++idouble: 1 ++Test "exp10 (4932)": ++ildouble: 1 ++ldouble: 1 ++ ++# exp2 ++Test "exp2 (100.5)": ++ildouble: 1 ++ldouble: 1 ++ ++# exp_downward ++Test "exp_downward (2)": ++float: 1 ++ifloat: 1 ++Test "exp_downward (3)": ++float: 1 ++ifloat: 1 ++ ++# exp_towardzero ++Test "exp_towardzero (2)": ++float: 1 ++ifloat: 1 ++Test "exp_towardzero (3)": ++float: 1 ++ifloat: 1 ++ ++# exp_upward ++Test "exp_upward (1)": ++float: 1 ++ifloat: 1 ++ ++# expm1 ++Test "expm1 (-79.0)": ++ildouble: 1 ++ldouble: 1 ++Test "expm1 (0.75)": ++double: 1 ++idouble: 1 ++Test "expm1 (1)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "expm1 (500.0)": ++double: 1 ++idouble: 1 ++ ++# gamma ++Test "gamma (-0.5)": ++ildouble: 1 ++ldouble: 1 ++Test "gamma (0.7)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "gamma (1.2)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++# hypot ++Test "hypot (-0.7, -12.4)": ++float: 1 ++ifloat: 1 ++Test "hypot (-0.7, 12.4)": ++float: 1 ++ifloat: 1 ++Test "hypot (-12.4, -0.7)": ++float: 1 ++ifloat: 1 ++Test "hypot (-12.4, 0.7)": ++float: 1 ++ifloat: 1 ++Test "hypot (0.7, -12.4)": ++float: 1 ++ifloat: 1 ++Test "hypot (0.7, 12.4)": ++float: 1 ++ifloat: 1 ++Test "hypot (12.4, -0.7)": ++float: 1 ++ifloat: 1 ++Test "hypot (12.4, 0.7)": ++float: 1 ++ifloat: 1 ++ ++# j0 ++Test "j0 (-0x1.001000001p+593)": ++ildouble: 1 ++ldouble: 1 ++Test "j0 (-4.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "j0 (0.75)": ++float: 1 ++ifloat: 1 ++Test "j0 (0x1.d7ce3ap+107)": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "j0 (0x1p1023)": ++ildouble: 1 ++ldouble: 1 ++Test "j0 (0x1p16383)": ++ildouble: 2 ++ldouble: 2 ++Test "j0 (10.0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "j0 (2.0)": ++float: 2 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++Test "j0 (4.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "j0 (8.0)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# j1 ++Test "j1 (-1.0)": ++ildouble: 1 ++ldouble: 1 ++Test "j1 (0.75)": ++ildouble: 1 ++ldouble: 1 ++Test "j1 (0x1.3ffp+74)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "j1 (0x1.ff00000000002p+840)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "j1 (0x1p1023)": ++ildouble: 1 ++ldouble: 1 ++Test "j1 (0x1p16382)": ++ildouble: 1 ++ldouble: 1 ++Test "j1 (0x1p16383)": ++ildouble: 2 ++ldouble: 2 ++Test "j1 (1.0)": ++ildouble: 1 ++ldouble: 1 ++Test "j1 (10.0)": ++float: 2 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++Test "j1 (2.0)": ++double: 1 ++idouble: 1 ++Test "j1 (8.0)": ++double: 1 ++idouble: 1 ++ildouble: 4 ++ldouble: 4 ++ ++# jn ++Test "jn (0, -4.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (0, 0.75)": ++float: 1 ++ifloat: 1 ++Test "jn (0, 10.0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "jn (0, 2.0)": ++float: 2 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++Test "jn (0, 4.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (0, 8.0)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "jn (1, -1.0)": ++ildouble: 1 ++ldouble: 1 ++Test "jn (1, 0.75)": ++ildouble: 1 ++ldouble: 1 ++Test "jn (1, 1.0)": ++ildouble: 1 ++ldouble: 1 ++Test "jn (1, 10.0)": ++float: 2 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++Test "jn (1, 2.0)": ++double: 1 ++idouble: 1 ++Test "jn (1, 8.0)": ++double: 1 ++idouble: 1 ++ildouble: 4 ++ldouble: 4 ++Test "jn (10, -1.0)": ++ildouble: 1 ++ldouble: 1 ++Test "jn (10, 0.125)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "jn (10, 0.75)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "jn (10, 1.0)": ++ildouble: 1 ++ldouble: 1 ++Test "jn (10, 10.0)": ++double: 4 ++float: 3 ++idouble: 4 ++ifloat: 3 ++ildouble: 2 ++ldouble: 2 ++Test "jn (10, 2.0)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "jn (2, 0x1.ffff62p+99)": ++double: 2 ++float: 2 ++idouble: 2 ++ifloat: 2 ++Test "jn (2, 2.4048255576957729)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "jn (3, 0.125)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (3, 0.75)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (3, 10.0)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "jn (3, 2.0)": ++float: 1 ++ifloat: 1 ++Test "jn (3, 2.4048255576957729)": ++double: 3 ++idouble: 3 ++ildouble: 1 ++ldouble: 1 ++Test "jn (4, 2.4048255576957729)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "jn (5, 2.4048255576957729)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "jn (6, 2.4048255576957729)": ++double: 4 ++float: 3 ++idouble: 4 ++ifloat: 3 ++ildouble: 5 ++ldouble: 5 ++Test "jn (7, 2.4048255576957729)": ++double: 3 ++float: 5 ++idouble: 3 ++ifloat: 5 ++ildouble: 3 ++ldouble: 3 ++Test "jn (8, 2.4048255576957729)": ++double: 3 ++float: 2 ++idouble: 3 ++ifloat: 2 ++ildouble: 8 ++ldouble: 8 ++Test "jn (9, 2.4048255576957729)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 3 ++ldouble: 3 ++ ++# lgamma ++Test "lgamma (-0.5)": ++ildouble: 1 ++ldouble: 1 ++Test "lgamma (0.7)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "lgamma (1.2)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++# log10 ++Test "log10 (0.75)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "log10 (e)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# log1p ++Test "log1p (-0.25)": ++float: 1 ++ifloat: 1 ++ ++# log2 ++Test "log2 (0.75)": ++ildouble: 1 ++ldouble: 1 ++ ++# pow ++Test "pow (0x0.fffffffffffff8p0, -0x1.23456789abcdfp62)": ++ildouble: 1 ++ldouble: 1 ++Test "pow (0x0.ffffffp0, -0x1p24)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "pow (0x0.ffffffp0, 0x1p24)": ++float: 1 ++ifloat: 1 ++Test "pow (0x1.000002p0, 0x1p24)": ++float: 1 ++ifloat: 1 ++Test "pow (10.0, -4930.0)": ++ildouble: 1 ++ldouble: 1 ++Test "pow (10.0, 4929.0)": ++ildouble: 1 ++ldouble: 1 ++Test "pow (10.0, 4930.0)": ++ildouble: 1 ++ldouble: 1 ++Test "pow (10.0, 4931.0)": ++ildouble: 1 ++ldouble: 1 ++Test "pow (10.0, 4932.0)": ++ildouble: 1 ++ldouble: 1 ++Test "pow (1e4932, 0.75)": ++ildouble: 1 ++ldouble: 1 ++ ++# pow10 ++Test "pow10 (-1)": ++double: 1 ++idouble: 1 ++Test "pow10 (-305)": ++double: 1 ++idouble: 1 ++Test "pow10 (-36)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "pow10 (3)": ++double: 1 ++idouble: 1 ++Test "pow10 (36)": ++double: 1 ++idouble: 1 ++Test "pow10 (4932)": ++ildouble: 1 ++ldouble: 1 ++ ++# pow_downward ++Test "pow_downward (1.5, 1.03125)": ++float: 1 ++ifloat: 1 ++ ++# pow_towardzero ++Test "pow_towardzero (1.5, 1.03125)": ++float: 1 ++ifloat: 1 ++ ++# pow_upward ++Test "pow_upward (1.0625, 1.125)": ++float: 1 ++ifloat: 1 ++ ++# sin_downward ++Test "sin_downward (10)": ++float: 1 ++ifloat: 1 ++Test "sin_downward (3)": ++float: 1 ++ifloat: 1 ++Test "sin_downward (5)": ++float: 1 ++ifloat: 1 ++Test "sin_downward (6)": ++float: 1 ++ifloat: 1 ++ ++# sin_tonearest ++Test "sin_tonearest (1)": ++float: 1 ++ifloat: 1 ++Test "sin_tonearest (3)": ++ildouble: 1 ++ldouble: 1 ++ ++# sin_towardzero ++Test "sin_towardzero (1)": ++float: 1 ++ifloat: 1 ++Test "sin_towardzero (10)": ++float: 1 ++ifloat: 1 ++Test "sin_towardzero (4)": ++float: 1 ++ifloat: 1 ++Test "sin_towardzero (5)": ++float: 1 ++ifloat: 1 ++Test "sin_towardzero (9)": ++float: 1 ++ifloat: 1 ++ ++# sin_upward ++Test "sin_upward (1)": ++float: 1 ++ifloat: 1 ++Test "sin_upward (2)": ++float: 2 ++ifloat: 2 ++Test "sin_upward (4)": ++float: 1 ++ifloat: 1 ++Test "sin_upward (9)": ++float: 1 ++ifloat: 1 ++ ++# sincos ++Test "sincos (0x1p+120) extra output 2": ++float: 1 ++ifloat: 1 ++Test "sincos (0x1p+127) extra output 2": ++float: 1 ++ifloat: 1 ++Test "sincos (M_PI_6l*2.0) extra output 1": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "sincos (M_PI_6l*2.0) extra output 2": ++double: 1 ++idouble: 1 ++Test "sincos (pi/6) extra output 2": ++float: 1 ++ifloat: 1 ++ ++# sinh_downward ++Test "sinh_downward (22)": ++float: 1 ++ifloat: 1 ++Test "sinh_downward (23)": ++float: 1 ++ifloat: 1 ++Test "sinh_downward (24)": ++float: 1 ++ifloat: 1 ++ ++# sinh_towardzero ++Test "sinh_towardzero (22)": ++float: 1 ++ifloat: 1 ++Test "sinh_towardzero (23)": ++float: 1 ++ifloat: 1 ++Test "sinh_towardzero (24)": ++float: 1 ++ifloat: 1 ++ ++# tan_downward ++Test "tan_downward (1)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (10)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (2)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (6)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (8)": ++float: 1 ++ifloat: 1 ++Test "tan_downward (9)": ++float: 1 ++ifloat: 1 ++ ++# tan_towardzero ++Test "tan_towardzero (10)": ++float: 1 ++ifloat: 1 ++Test "tan_towardzero (3)": ++float: 1 ++ifloat: 1 ++Test "tan_towardzero (4)": ++float: 1 ++ifloat: 1 ++Test "tan_towardzero (5)": ++float: 1 ++ifloat: 1 ++Test "tan_towardzero (9)": ++float: 1 ++ifloat: 1 ++ ++# tan_upward ++Test "tan_upward (1)": ++float: 1 ++ifloat: 1 ++Test "tan_upward (10)": ++float: 1 ++ifloat: 1 ++Test "tan_upward (3)": ++float: 1 ++ifloat: 1 ++Test "tan_upward (5)": ++float: 1 ++ifloat: 1 ++ ++# tanh ++Test "tanh (-0.75)": ++ildouble: 1 ++ldouble: 1 ++Test "tanh (-1.0)": ++ildouble: 1 ++ldouble: 1 ++Test "tanh (0.75)": ++ildouble: 1 ++ldouble: 1 ++Test "tanh (1.0)": ++ildouble: 1 ++ldouble: 1 ++ ++# tgamma ++Test "tgamma (-0.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x0.fffffffffffff8p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x0.ffffffffffffffffffffffffffff8p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x0.ffffffp0)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x1.0000000000000002p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x1.0000000000001p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x1.000002p0)": ++double: 2 ++idouble: 2 ++Test "tgamma (-0x1.0a32a2p+5)": ++float: 2 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x1.5800000080001p+7)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x1.fffffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x1.fffffffffffffp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x13.ffffep0)": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x13.ffffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x13.fffffffffffffffffffffffff8p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x13.ffffffffffffp0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x14.000000000000000000000000001p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x14.000000000001p0)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x14.00002p0)": ++float: 1 ++ifloat: 1 ++ildouble: 4 ++ldouble: 4 ++Test "tgamma (-0x1d.ffffep0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x1d.fffffffffffffffffffffffff8p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x1d.ffffffffffffp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x1e.000000000000000000000000001p0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x1e.00000000000000000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x1e.000000000000002p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x1e.000000000001p0)": ++double: 3 ++idouble: 3 ++Test "tgamma (-0x1e.00002p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x1f3.ffffffffffffffffffffffffffp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x1p-24)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x2.0000000000000000000000000002p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x2.0000000000002p0)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x2.000004p0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x2.fffffcp0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x2.ffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x27.fffffffffffep0)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x27.ffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x27.ffffffffffffffffffffffffffep0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x27.fffffffffffffffffffffffffp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x28.0000000000000000000000001p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x28.000000000002p0)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x28.00004p0)": ++double: 2 ++idouble: 2 ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x28.ffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x28.ffffffffffffffffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x28.fffffffffffffffffffffffffp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x29.000000000000000000000000002p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x29.0000000000000000000000001p0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x29.00004p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x29.ffffcp0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x29.fffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x29.ffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x29.ffffffffffffffffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x29.fffffffffffffffffffffffffp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x2a.000000000000000000000000002p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x2a.0000000000000000000000001p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x2a.000000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x2a.000000000002p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x2ed.fffffffffffffffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x2ee.00000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x3.00000000000000000000000001p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x3.000004p0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (-0x3.fffffcp0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x3.ffffffffffffep0)": ++double: 2 ++idouble: 2 ++Test "tgamma (-0x3.fffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x3.fffffffffffffffffffffffffffep0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x31.fffffffffffep0)": ++double: 3 ++idouble: 3 ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x31.ffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x31.ffffffffffffffffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x31.fffffffffffffffffffffffffp0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x32.000000000000000000000000002p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x32.0000000000000000000000001p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x32.000000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x3e7.fffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x3e7.fffffffffffffffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x3e8.00000000000000000000000002p0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x3e8.00000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x4.0000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x4.000008p0)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x4.fffff8p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x4.ffffffffffffcp0)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x4.fffffffffffffffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x4.fffffffffffffffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x5.0000000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x5.0000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x5.000008p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x5.fffff8p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x5.ffffffffffffcp0)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x5.fffffffffffffff8p0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x5.fffffffffffffffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x5.fffffffffffffffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x5db.fffffffffffff8p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x5db.fffffffffffffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x5dc.00000000000000000000000004p0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x6.0000000000000000000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x6.00000000000000000000000002p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x6.0000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x6.000008p0)": ++float: 2 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x6.fffff8p0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x6.ffffffffffffcp0)": ++double: 4 ++idouble: 4 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x6.fffffffffffffff8p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x6.fffffffffffffffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x63.fffffffffffcp0)": ++double: 2 ++idouble: 2 ++Test "tgamma (-0x63.ffffffffffffff8p0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x63.ffffffffffffffffffffffffep0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x64.000000000000000000000000004p0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x64.0000000000000000000000002p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x64.000000000004p0)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x6d5.fffffffffffff8p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x6d6.00000000000000000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x6e3.00000000000000000000000004p0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x7.0000000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x7.0000000000004p0)": ++double: 3 ++idouble: 3 ++Test "tgamma (-0x7.000008p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-0x7.fffff8p0)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "tgamma (-0x7.ffffffffffffcp0)": ++double: 3 ++idouble: 3 ++Test "tgamma (-0x7.fffffffffffffff8p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x7.fffffffffffffffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x7.fffffffffffffffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x8.0000000000000000000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x8.00000000000000000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x8.0000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x8.00001p0)": ++double: 2 ++idouble: 2 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x9.ffffffffffff8p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0x9.fffffffffffffffffffffffffff8p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x9.fffffp0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (-0x95.ffffffffffffffp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x96.000000000000000000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x96.0000000000000000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0x96.00000000000001p0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0x96.000000000008p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (-0xa.0000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xa.00001p0)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xb4.ffffffffffffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xb4.ffffffffffffffp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xb5.0000000000000000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xb5.00000000000001p0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0xb5.000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xb5.ffffffffffffffffffffffffff8p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xb6.00000000000001p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xb6.000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xb6.fffffffffff8p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xb6.ffffffffffffffffffffffffff8p0)": ++ildouble: 3 ++ldouble: 3 ++Test "tgamma (-0xb7.000000000000000000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xb7.00000000000001p0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0xb7.000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xb7.ffffffffffffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xb7.ffffffffffffffffffffffffff8p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xb8.00000000000001p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xbb.ffffffffffffffffffffffffcp0)": ++ildouble: 3 ++ldouble: 3 ++Test "tgamma (-0xbb.ffffffffffffffffffffffffff8p0)": ++ildouble: 4 ++ldouble: 4 ++Test "tgamma (-0xbc.000000000000000000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xbc.0000000000000000000000004p0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0xbc.00000000000001p0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0xbc.ffffffffffffffp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xbd.000000000000000000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xbd.00000000000001p0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0xbd.ffffffffffffffp0)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (-0xbe.000000000000000000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xbe.0000000000000000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xbe.ffffffffffffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xbe.ffffffffffffffp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xbf.000000000000000000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xbf.0000000000000000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xbf.00000000000001p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xf9.ffffffffffffffp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-0xfa.000000000000000000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-2.5)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-3.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-4.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-5.5)": ++double: 1 ++idouble: 1 ++Test "tgamma (-6.5)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (-7.5)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (-8.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (-9.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (0.5)": ++float: 1 ++ifloat: 1 ++Test "tgamma (0.7)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (0x1.fffffep0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (0x1.fffffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x1.ffffffffffffffffffffffffffffp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x1.fffffffffffffp0)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x1p-113)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x1p-24)": ++float: 1 ++ifloat: 1 ++Test "tgamma (0x1p-53)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x2.30a43cp+4)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (0x2.fffffcp0)": ++float: 3 ++ifloat: 3 ++Test "tgamma (0x2.ffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x3.0000000000002p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x3.fffffcp0)": ++float: 1 ++ifloat: 1 ++Test "tgamma (0x3.ffffffffffffep0)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x3.fffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x3.fffffffffffffffffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x4.0000000000000000000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x4.0000000000004p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x4.000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x4.ffffffffffffcp0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x4.fffffffffffffffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x4.fffffffffffffffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x5.0000000000000000000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x5.0000000000004p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x5.000008p0)": ++float: 2 ++ifloat: 2 ++Test "tgamma (0x5.fffff8p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (0x5.ffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x5.fffffffffffffff8p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x5.fffffffffffffffffffffffffep0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x6.0000000000000000000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x6.0000000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x6.0000000000004p0)": ++double: 1 ++idouble: 1 ++Test "tgamma (0x6.000008p0)": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x6.fffff8p0)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x6.ffffffffffffcp0)": ++double: 4 ++idouble: 4 ++Test "tgamma (0x6.fffffffffffffff8p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x7.0000000000000000000000000004p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x7.0000000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x7.0000000000004p0)": ++double: 4 ++idouble: 4 ++Test "tgamma (0x7.000008p0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (0x7.fffff8p0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (0x7.ffffffffffffcp0)": ++double: 2 ++idouble: 2 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x7.fffffffffffffffffffffffffffcp0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x8.0000000000000000000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x8.0000000000008p0)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0x8.00001p0)": ++double: 2 ++idouble: 2 ++Test "tgamma (0xa.b9fd72b0fb238p+4)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0xa.b9fd72b0fb23a9ddbf0d3804f8p+4)": ++ildouble: 2 ++ldouble: 2 ++Test "tgamma (10)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (18.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (19.5)": ++double: 2 ++idouble: 2 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (2.5)": ++float: 2 ++ifloat: 2 ++Test "tgamma (23.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (29.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (3)": ++float: 1 ++ifloat: 1 ++Test "tgamma (3.5)": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (30.5)": ++float: 1 ++ifloat: 1 ++Test "tgamma (32.5)": ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (33.5)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (34.5)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "tgamma (4)": ++float: 1 ++ifloat: 1 ++Test "tgamma (4.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (6)": ++float: 1 ++ifloat: 1 ++Test "tgamma (6.5)": ++float: 1 ++ifloat: 1 ++Test "tgamma (7)": ++double: 1 ++idouble: 1 ++Test "tgamma (7.5)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "tgamma (8)": ++double: 1 ++idouble: 1 ++Test "tgamma (8.5)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (9)": ++double: 1 ++idouble: 1 ++Test "tgamma (9.5)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# y0 ++Test "y0 (0x1.3ffp+74)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "y0 (0x1.ff00000000002p+840)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "y0 (0x1p-10)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "y0 (0x1p-110)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "y0 (0x1p-20)": ++float: 1 ++ifloat: 1 ++Test "y0 (0x1p-30)": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "y0 (0x1p-40)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "y0 (0x1p-50)": ++float: 1 ++ifloat: 1 ++Test "y0 (0x1p-60)": ++ildouble: 1 ++ldouble: 1 ++Test "y0 (0x1p-70)": ++double: 1 ++idouble: 1 ++Test "y0 (0x1p-80)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "y0 (0x1p1023)": ++ildouble: 1 ++ldouble: 1 ++Test "y0 (0x1p16382)": ++ildouble: 1 ++ldouble: 1 ++Test "y0 (0x1p16383)": ++ildouble: 2 ++ldouble: 2 ++Test "y0 (1.0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "y0 (1.5)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "y0 (10.0)": ++float: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++Test "y0 (8.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++ ++# y1 ++Test "y1 (0.125)": ++double: 1 ++idouble: 1 ++Test "y1 (0.75)": ++ildouble: 1 ++ldouble: 1 ++Test "y1 (0x1.001000001p+593)": ++ildouble: 1 ++ldouble: 1 ++Test "y1 (0x1.27e204p+99)": ++double: 1 ++idouble: 1 ++Test "y1 (0x1p-10)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "y1 (0x1p-30)": ++ildouble: 1 ++ldouble: 1 ++Test "y1 (0x1p1023)": ++ildouble: 1 ++ldouble: 1 ++Test "y1 (0x1p16383)": ++ildouble: 2 ++ldouble: 2 ++Test "y1 (1.5)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "y1 (10.0)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "y1 (2.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "y1 (8.0)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++# yn ++Test "yn (0, 1.0)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "yn (0, 1.5)": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "yn (0, 10.0)": ++float: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++Test "yn (0, 8.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++Test "yn (1, 0.125)": ++double: 1 ++idouble: 1 ++Test "yn (1, 0.75)": ++ildouble: 1 ++ldouble: 1 ++Test "yn (1, 1.5)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "yn (1, 10.0)": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "yn (1, 2.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "yn (1, 8.0)": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "yn (10, 0.125)": ++double: 1 ++idouble: 1 ++ildouble: 2 ++ldouble: 2 ++Test "yn (10, 0.75)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 5 ++ldouble: 5 ++Test "yn (10, 1.0)": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "yn (10, 10.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "yn (10, 2.0)": ++double: 2 ++idouble: 2 ++ildouble: 2 ++ldouble: 2 ++Test "yn (3, 0.125)": ++double: 1 ++idouble: 1 ++Test "yn (3, 0.75)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "yn (3, 10.0)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "yn (3, 2.0)": ++double: 1 ++idouble: 1 ++ ++# Maximal error of functions: ++Function: "acos_downward": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "acos_towardzero": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "asin_downward": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "asin_towardzero": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "asin_upward": ++float: 1 ++ifloat: 1 ++ ++Function: "atan2": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "atanh": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "cacos": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Imaginary part of "cacos": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Real part of "cacosh": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Imaginary part of "cacosh": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Real part of "casin": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Imaginary part of "casin": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Real part of "casinh": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Imaginary part of "casinh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Real part of "catan": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "catan": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "catanh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "catanh": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "cbrt": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "ccos": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "ccos": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "ccosh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "ccosh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "cexp": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "cexp": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "clog": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "clog": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "clog10": ++double: 2 ++float: 2 ++idouble: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "clog10": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: "cos": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "cos_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "cos_tonearest": ++float: 1 ++ifloat: 1 ++ ++Function: "cos_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "cos_upward": ++float: 2 ++ifloat: 2 ++ ++Function: "cosh_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "cosh_tonearest": ++ildouble: 1 ++ldouble: 1 ++ ++Function: "cosh_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "cpow": ++double: 2 ++float: 4 ++idouble: 2 ++ifloat: 4 ++ildouble: 4 ++ldouble: 4 ++ ++Function: Imaginary part of "cpow": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "csin": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "csin": ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "csinh": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "csinh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "csqrt": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "csqrt": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "ctan": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Imaginary part of "ctan": ++double: 1 ++idouble: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Real part of "ctan_downward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: Imaginary part of "ctan_downward": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "ctan_tonearest": ++float: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++ ++Function: Imaginary part of "ctan_tonearest": ++float: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++ ++Function: Real part of "ctan_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctan_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "ctan_upward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: Imaginary part of "ctan_upward": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Real part of "ctanh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Imaginary part of "ctanh": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Real part of "ctanh_downward": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctanh_downward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: Real part of "ctanh_tonearest": ++float: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++ ++Function: Imaginary part of "ctanh_tonearest": ++float: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++ ++Function: Real part of "ctanh_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "ctanh_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "ctanh_upward": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++Function: Imaginary part of "ctanh_upward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ ++Function: "erf": ++double: 1 ++idouble: 1 ++ ++Function: "erfc": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "exp10": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "exp2": ++ildouble: 1 ++ldouble: 1 ++ ++Function: "exp_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "exp_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "exp_upward": ++float: 1 ++ifloat: 1 ++ ++Function: "expm1": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "gamma": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "hypot": ++float: 1 ++ifloat: 1 ++ ++Function: "j0": ++double: 2 ++float: 2 ++idouble: 2 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++ ++Function: "j1": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 4 ++ldouble: 4 ++ ++Function: "jn": ++double: 4 ++float: 5 ++idouble: 4 ++ifloat: 5 ++ildouble: 8 ++ldouble: 8 ++ ++Function: "lgamma": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "log10": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "log1p": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "log2": ++ildouble: 1 ++ldouble: 1 ++ ++Function: "pow": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "pow10": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "pow_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "pow_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "pow_upward": ++float: 1 ++ifloat: 1 ++ ++Function: "sin_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "sin_tonearest": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "sin_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "sin_upward": ++float: 2 ++ifloat: 2 ++ ++Function: "sincos": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "sinh_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "sinh_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "tan": ++double: 1 ++idouble: 1 ++ ++Function: "tan_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "tan_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "tan_upward": ++float: 1 ++ifloat: 1 ++ ++Function: "tanh": ++ildouble: 1 ++ldouble: 1 ++ ++Function: "tgamma": ++double: 4 ++float: 3 ++idouble: 4 ++ifloat: 3 ++ildouble: 4 ++ldouble: 4 ++ ++Function: "y0": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++ ++Function: "y1": ++double: 3 ++float: 2 ++idouble: 3 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++ ++Function: "yn": ++double: 3 ++float: 2 ++idouble: 3 ++ifloat: 2 ++ildouble: 5 ++ldouble: 5 ++ ++# end of automatic generation +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-07-25 20:36:11.517359363 +0200 +@@ -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-07-25 20:36:11.517359363 +0200 +@@ -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-07-25 20:36:11.517359363 +0200 +@@ -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-07-25 20:36:11.517359363 +0200 +@@ -1,14 +1,19 @@ + # 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 ++# libm-test.c is a generated file used by the tests internally so skip it ++TESTS_DISABLED := libm-test ++ + # 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,9 +28,17 @@ + + PERL := /usr/bin/perl + +-$(TESTS): libm-test.c ++MDEPS := $(wildcard test-*.c) ++$(MDEPS): libm-test.c ++ ++TARGET_ULP := $(if $(wildcard libm-test-ulps-$(TARGET_ARCH)),$(TARGET_ARCH),generic) ++ULP_SUFFIX := ++ifeq ($(TARGET_ARCH),mips) ++ULP_SUFFIX:=$(if $(CONFIG_MIPS_ISA_MIPS64R1)$(CONFIG_MIPS_ISA_MIPS64R2),64,32) ++endif ++TARGET_ULP:=$(TARGET_ULP)$(ULP_SUFFIX) + +-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 ++libm-test.c: libm-test-ulps-$(TARGET_ULP) libm-test.inc gen-libm-test.pl ++ $(Q)$(PERL) ./gen-libm-test.pl -u libm-test-ulps-$(TARGET_ULP) ./libm-test.inc -o "." 2>&1 > /dev/null + + EXTRA_CLEAN := libm-test.c libm-test-ulps.h +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-07-25 20:36:11.521359385 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:11.521359385 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:11.521359385 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.521359385 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:11.521359385 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:11.521359385 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:11.521359385 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:11.521359385 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.537359468 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.537359468 +0200 +@@ -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-07-25 20:36:11.537359468 +0200 +@@ -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-07-25 20:36:11.541359489 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.541359489 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.541359489 +0200 +@@ -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 . + + + # 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-07-25 20:36:11.541359489 +0200 +@@ -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 ++ . */ + + #include + #include +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-07-25 20:36:11.541359489 +0200 +@@ -0,0 +1,66 @@ ++/* vi: set sw=4 ts=4 sts=4: */ ++/* ++ * inotify test for uClibc ++ * Copyright (C) 2012 by Kevin Cernekee ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++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-07-25 20:36:11.541359489 +0200 +@@ -0,0 +1,31 @@ ++#include ++#include ++#include ++#include ++#include ++ ++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-07-25 20:36:11.541359489 +0200 +@@ -0,0 +1,26 @@ ++#include ++#include ++#include ++#include ++#include ++ ++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-07-25 20:36:11.541359489 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.561359595 +0200 +@@ -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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +diff -Nur uClibc-0.9.33.2/test/nptl/Makefile.in uClibc-git/test/nptl/Makefile.in +--- uClibc-0.9.33.2/test/nptl/Makefile.in 2012-05-15 09:20:09.000000000 +0200 ++++ uClibc-git/test/nptl/Makefile.in 2014-07-25 20:36:11.581359699 +0200 +@@ -73,21 +73,11 @@ + GLIBC_TESTS_DISABLED += tst-tls3_glibc tst-tls4_glibc tst-tls5_glibc + endif + +-PTDIR := $(top_builddir)libpthread/nptl +-SYSDEPS_DIR := $(top_srcdir)libc/sysdeps +- + EXTRA_CFLAGS := -DNOT_IN_libc=1 -D_LIBC -D__USE_GNU -std=gnu99 \ +- -I$(SYSDEPS_DIR)/linux \ +- -I$(SYSDEPS_DIR)/linux/$(TARGET_ARCH) \ +- -I$(PTDIR) -I$(PTDIR)/sysdeps/unix/sysv/linux/$(TARGET_ARCH) \ +- -I$(PTDIR)/sysdeps/$(TARGET_ARCH) \ +- -I$(PTDIR)/sysdeps/unix/sysv/linux \ +- -I$(PTDIR)/sysdeps/pthread \ +- -I$(PTDIR)/sysdeps/pthread/bits \ +- -I$(PTDIR)/sysdeps/generic \ +- -I$(top_builddir)ldso/include \ +- -I$(top_builddir)ldso/ldso/$(TARGET_ARCH) \ +- -I$(top_builddir)include \ ++ $(PTINC) \ ++ -I$(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH) \ ++ -I$(top_srcdir)libc/sysdeps/linux \ ++ -I$(top_builddir)include \ + -include $(top_builddir)include/libc-symbols.h + + ifeq ($(TARGET_ARCH),i386) +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-07-25 20:36:11.581359699 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* This is a test for behavior not guaranteed by POSIX. */ + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.581359699 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.585359720 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* This test checks behavior not required by POSIX. */ + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* 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-07-25 20:36:11.589359741 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.589359741 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -14,9 +14,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + /* Check alignment, overlapping and layout of TLS variables. */ + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -13,9 +13,8 @@ + Lesser General 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 . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.593359762 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.621359909 +0200 +@@ -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-07-25 20:36:11.645360034 +0200 +@@ -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-07-25 20:36:11.661360118 +0200 +@@ -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-07-25 20:36:11.661360118 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.681360223 +0200 +@@ -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-07-25 20:36:10.745355319 +0200 +@@ -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-07-25 20:36:11.689360265 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ; ++ License along with the GNU C Library; If not, see ++ . */ + + /* 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-07-25 20:36:11.689360265 +0200 +@@ -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-07-25 20:36:11.689360265 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.709360369 +0200 +@@ -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-07-25 20:36:11.709360369 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.709360369 +0200 +@@ -0,0 +1,63 @@ ++/* vi: set sw=4 ts=4 sts=4: */ ++/* ++ * signalfd test for uClibc ++ * Copyright (C) 2012 by Kevin Cernekee ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++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-07-25 20:36:11.709360369 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.713360391 +0200 +@@ -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-07-25 20:36:11.721360432 +0200 +@@ -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-07-25 20:36:11.737360516 +0200 +@@ -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-07-25 20:36:11.761360643 +0200 +@@ -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-07-25 20:36:11.761360643 +0200 +@@ -0,0 +1,12 @@ ++#include ++#include ++ ++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-07-25 20:36:11.761360643 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.761360643 +0200 +@@ -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 ++ . */ + + /* 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-07-25 20:36:11.809360893 +0200 +@@ -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-07-25 20:36:11.809360893 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:11.813360914 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.813360914 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:11.813360914 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.813360914 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.813360914 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:11.825360977 +0200 +@@ -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-07-25 20:36:10.745355319 +0200 +@@ -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-07-25 20:36:11.825360977 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +@@ -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-07-25 20:36:11.825360977 +0200 +@@ -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-07-25 20:36:11.849361103 +0200 +@@ -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-07-25 20:36:11.849361103 +0200 +@@ -12,9 +12,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.849361103 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.853361125 +0200 +@@ -0,0 +1,71 @@ ++/* vi: set sw=4 ts=4 sts=4: */ ++/* ++ * timerfd test for uClibc ++ * Copyright (C) 2012 by Kevin Cernekee ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++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-07-25 20:36:11.853361125 +0200 +@@ -13,9 +13,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:11.865361187 +0200 +@@ -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-07-25 20:36:11.869361208 +0200 +@@ -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-07-25 20:36:11.869361208 +0200 +@@ -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-07-25 20:36:11.869361208 +0200 +@@ -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-07-25 20:36:11.869361208 +0200 +@@ -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-07-25 20:36:11.869361208 +0200 +@@ -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-07-25 20:36:11.869361208 +0200 +@@ -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-07-25 20:36:11.869361208 +0200 +@@ -0,0 +1,127 @@ ++#include ++#include ++ ++#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 ++ ++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-07-25 20:36:11.869361208 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #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-07-25 20:36:11.869361208 +0200 +@@ -14,9 +14,8 @@ + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, write to the Free +- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +- 02111-1307 USA. */ ++ License along with the GNU C Library; if not, see ++ . */ + + #include + #include +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-07-25 20:36:04.409322131 +0200 +@@ -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-07-25 20:36:11.877361249 +0200 +@@ -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 . + * + * 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-07-25 20:36:11.877361249 +0200 +@@ -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 . */ + + #define _GNU_SOURCE 1 ++#include "porting.h" + #include + #include + #include +@@ -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-07-25 20:36:11.877361249 +0200 +@@ -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 ++ * . + */ + + /* 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 + #include "porting.h" + #include + #include + #include +-#include + #include + #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-07-25 20:36:11.877361249 +0200 +@@ -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 ++#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-07-25 20:36:11.877361249 +0200 +@@ -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 +@@ -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-07-25 20:36:11.877361249 +0200 +@@ -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 := \ -- cgit v1.2.3