powerpc: Add powerpc64 strspn optimization

This patch makes the POWER7 optimized strspn generic by using
default doubleword stores to zero the hash, instead of VSX
instructions. Performance on POWER7/POWER8 machines does not changed.
powerpc: Add powerpc64 strcspn optimization

This patch makes the POWER7 optimized strcspn generic by using
default doubleword stores to zero the hash, instead of VSX
instructions.  Performance on POWER7/POWER8 does not change.
powerpc: Add powerpc64 strpbrk optimization

This patch makes the POWER7 optimized strpbrk generic by using
default doubleword stores to zero the hash, instead of VSX
instructions.  Performance on POWER7/POWER8 does not change.
Fix elf/tst-unique4lib.cc warning.

This patch fixes a warning "tst-unique4lib.cc:17:12: warning: 'b'
defined but not used [-Wunused-variable]".  I'm not sure exactly what
aspects of the test are or are not significant for the issue it is
testing for; the patch makes the minimal change of marking the
variable with __attribute__ ((used)).

Tested for x86_64.

	* elf/tst-unique4lib.cc (b): Mark with __attribute__ ((used)).
Fix fgets_unlocked namespace issues (bug 17664).

Various POSIX functions bring in res_init.o, res_hconf.o or
mntent_r.o, which use fgets_unlocked, which is not a POSIX function.
This patch arranges for them to use __fgets_unlocked instead.  (The
IS_IN (libc) conditional in rec_hconf.c is needed because that file is
also used in nscd.)

Tested for x86_64 (testsuite, and that disassembly of installed shared
libraries is unchanged by the patch except for an assertion line
number).  Note that most of the linknamespace tests that failed
because of fgets_unlocked from the resolver also fail because of other
symbols brought in by the resolver, so the number of XFAILs this
removes is limited.  Also note that fgets_unlocked failures for
unistd.h for XPG3/XPG4 showed up that actually unistd.h is declaring
too much for XPG3/XPG4 (bug 17665) - there is no actual need to make
getusershell.c use __fgets_unlocked (at least as regards formal
standards are concerned; maybe it should still change for
namespace-cleanness of _DEFAULT_SOURCE) because the functions there
aren't actually in any of the supported standards; the correct fix for
those failures will be to stop the *usershell* functions appearing in
unistd.h for XPG3/XPG4.

	[BZ #17664]
	* misc/mntent_r.c (__getmntent_r): Use __fgets_unlocked instead of
	fgets_unlocked.
	* resolv/res_hconf.c [IS_IN (libc)] (fgets_unlocked): Define to
	__fgets_unlocked.
	* resolv/res_init.c (__res_vinit): Use __fgets_unlocked instead of
	fgets_unlocked.
	* conform/Makefile (test-xfail-XPG4/sys/statvfs.h/linknamespace):
	Remove variable.
	(test-xfail-POSIX/sys/mman.h/linknamespace): Likewise.
	(test-xfail-UNIX98/sys/mman.h/linknamespace): Likewise.
	(test-xfail-UNIX98/sys/statvfs.h/linknamespace): Likewise.
	(test-xfail-XOPEN2K/sys/mman.h/linknamespace): Likewise.
	(test-xfail-XOPEN2K/sys/statvfs.h/linknamespace): Likewise.
	(test-xfail-POSIX2008/sys/mman.h/linknamespace): Likewise.
	(test-xfail-POSIX2008/sys/statvfs.h/linknamespace): Likewise.
	(test-xfail-XOPEN2K8/sys/mman.h/linknamespace): Likewise.
	(test-xfail-XOPEN2K8/sys/statvfs.h/linknamespace): Likewise.
Remove excess declarations from unistd.h for XPG3/XPG4 (bug 17665).

For XPG3/XPG4 (defined __USE_XOPEN && !defined __USE_UNIX98), unistd.h
declares many functions that should only be declared for __USE_MISC
(none of them are in XPG3/XPG4): sethostname sethostid getdomainname
setdomainname vhangup revoke profil acct getusershell endusershell
setusershell daemon.  The whole block with the [__USE_MISC ||
(__USE_XOPEN && !__USE_UNIX98)] conditional contains only functions
that are not in XPG3/XPG4, so this patch simply changes the
conditional.

Tested for x86_64 (testsuite, and that installed stripped shared
libraries are unchanged by this patch).

	[BZ #17665]
	* posix/unistd.h [__USE_MISC || (__USE_XOPEN && !__USE_UNIX98)]:
	Change conditional to [__USE_MISC].
Fix warning in posix/tst-getopt_long1.c.

This patch fixes a "discards qualifiers" warning in
posix/tst-getopt_long1.c.  glibc is built with -Wwrite-strings,
meaning a char * cannot be initialized directly with a string
constant; the patch casts the string constants to char *.

Tested for x86_64.

	* posix/tst-getopt_long1.c (do_test): Cast elements of argv array
	to char *.
Fix -Waddress warnings in nptl/tst-mutex1.c.

This patch fixes -Waddress warnings in nptl/tst-mutex1.c from
comparing the address of an object with NULL (ATTR may either be NULL,
or the address of an object when included from other tests, and the
warning arises in the latter case).  A macro ATTR_NULL is defined
alongside ATTR and used for the tests.

Tested for x86_64.

	* nptl/tst-mutex1.c: Include <stdbool.h>.
	[!ATTR] (ATTR_NULL): New macro.
	(do_test): Test !ATTR_NULL instead of ATTR != NULL.
	* nptl/tst-mutexpi1.c (ATTR_NULL): New macro.
	* nptl/tst-mutexpp1.c (ATTR_NULL): New macro.
Fix warning in nptl/tst-stack4.c.

This patch fixes a warning in a test that was added since my recent
warning cleanup:

tst-stack4.c: In function 'dso_process':
tst-stack4.c:64:7: warning: format '%i' expects argument of type 'int', but argument 3 has type 'uintptr_t' [-Wformat=]

The original variable has type int then is cast to uintptr_t, and from
there to void *, to pass it to a thread, so reversing the process by
casting to uintptr_t and then to int is natural; this patch does so.

Tested for x86_64.

	* nptl/tst-stack4.c (dso_process): Use int not uintptr_t for t.
mips: Do not use jal to reach __libc_start_main

Since __libc_start_main may not be in the same 256MB-aligned region as
the function __start, replace use of jal instruction with la/jalr.

This fixes linker issue reported in:
https://sourceware.org/bugzilla/show_bug.cgi?id=17601

	[BZ #17601]
	* sysdeps/mips/start.S (__start): Use indirect jump to call
	__libc_start_main.
Fix getifaddrs, freeifaddrs namespace (bug 17668).

Various objects in glibc bring in ifaddrs.o (via references to
__netlink_*) and thereby getifaddrs and freeifaddrs, which are not
part of any standard supported by glibc.  These should be weak aliases
of __getifaddrs and __freeifaddrs; this patch makes them so.

(The path by which these functions are brought in is Linux-specific,
but it seems less confusing to make all versions of these functions
weak aliases rather than only the Linux-specific versions that
definitely need it.)

Tested for x86_64 (testsuite, and that disassembly of installed shared
libraries is unchanged by this patch).

	[BZ #17668]
	* inet/ifaddrs.c (getifaddrs): Rename to __getifaddrs and define
	as weak alias of __getifaddrs.  Use libc_hidden_weak.
	(freeifaddrs): Rename to __freeifaddrs and define as weak alias of
	__freeifaddrs.  Use libc_hidden_weak.
	* sysdeps/gnu/ifaddrs.c (getifaddrs): Rename to __getifaddrs and
	define as weak alias of __getifaddrs.  Use libc_hidden_weak.
	(freeifaddrs): Rename to __freeifaddrs and define as weak alias of
	__freeifaddrs.  Use libc_hidden_weak.
	* sysdeps/unix/sysv/linux/ifaddrs.c (getifaddrs): Rename to
	__getifaddrs and define as weak alias of __getifaddrs.  Use
	libc_hidden_weak.
	(freeifaddrs): Rename to __freeifaddrs and define as weak alias of
	__freeifaddrs.  Use libc_hidden_weak.
	* conform/Makefile (test-xfail-XOPEN2K/net/if.h/linknamespace):
	Remove variable.
	(test-xfail-POSIX2008/net/if.h/linknamespace): Likewise.
	(test-xfail-XOPEN2K8/net/if.h/linknamespace): Likewise.
Remove some linknamespace test XFAILs.

It seems two of the XFAILed linknamespace tests were completely fixed
by some of my recent namespace fixes in combination (although not by
any individual one of those fixes relative to the sources used for
testing each patch, or that individual fix would also have removed the
XFAIL in question).  This patch removes those XFAILs that are no
longer needed.

Tested for x86_64.

	* conform/Makefile (test-xfail-XOPEN2K/aio.h/linknamespace):
	Remove variable.
	(test-xfail-XOPEN2K8/aio.h/linknamespace): Likewise.