Luis Machado [Thu, 12 Aug 2010 17:11:08 +0000 (14:11 -0300)]
Additional POWER7 string optimizations.
2010-08-12 Luis Machado <luisgpm@br.ibm.com>
* sysdeps/powerpc/powerpc32/power7/memchr.S: New file.
* sysdeps/powerpc/powerpc32/power7/memrchr.S: New file.
* sysdeps/powerpc/powerpc32/power7/rawmemchr.S: New file.
* sysdeps/powerpc/powerpc32/power7/strchr.S: New file.
* sysdeps/powerpc/powerpc32/power7/strchrnul.S: New file.
* sysdeps/powerpc/powerpc32/power7/strlen.S: New file.
* sysdeps/powerpc/powerpc32/power7/strnlen.S: New file.
* sysdeps/powerpc/powerpc64/power7/memchr.S: New file.
* sysdeps/powerpc/powerpc64/power7/memrchr.S: New file.
* sysdeps/powerpc/powerpc64/power7/rawmemchr.S: New file.
* sysdeps/powerpc/powerpc64/power7/strchr.S: New file.
* sysdeps/powerpc/powerpc64/power7/strchrnul.S: New file.
* sysdeps/powerpc/powerpc64/power7/strlen.S: New file.
* sysdeps/powerpc/powerpc64/power7/strnlen.S: New file.
Luis Machado [Mon, 14 Jun 2010 21:36:43 +0000 (16:36 -0500)]
This patch adds 32-bit and 64-bit string compare optimizations for
power7. The code is based on the power4 version.
2010-06-10 Luis Machado <luisgpm@br.ibm.com>
* sysdeps/powerpc/powerpc32/power7/memcmp.S: New file
* sysdeps/powerpc/powerpc64/power7/memcmp.S: New file.
* sysdeps/powerpc/powerpc32/power7/strncmp.S: New file.
* sysdeps/powerpc/powerpc64/power7/strncmp.S: New file.
luis [Mon, 14 Jun 2010 20:33:57 +0000 (15:33 -0500)]
Experimental Implies fix for all PowerPC platforms.
2010-06-14 Luis Machado <luisgpm@br.ibm.com>
* sysdeps/powerpc/powerpc32/970/fpu/Implies: Remove.
* sysdeps/powerpc/powerpc32/power5/fpu/Implies: Remove.
* sysdeps/powerpc/powerpc32/power5+/fpu/Implies: Remove.
* sysdeps/powerpc/powerpc32/power6x/fpu/Implies: Remove.
* sysdeps/powerpc/powerpc64/970/fpu/Implies: Remove.
* sysdeps/powerpc/powerpc64/power5/fpu/Implies: Remove.
* sysdeps/powerpc/powerpc64/power5+/fpu/Implies: Remove.
* sysdeps/powerpc/powerpc64/power6x/fpu/Implies: Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/970/fpu/Implies: Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/power4/fpu/Implies: Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/power5/fpu/Implies: Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/power5+/fpu/Implies: Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/power6/fpu/Implies: Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/power6x/fpu/Implies: Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/power7/fpu/Implies: Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/970/fpu/Implies: Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/power4/fpu/Implies: Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/power5/fpu/Implies: Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/power5+/fpu/Implies: Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/power6/fpu/Implies: Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/power6x/fpu/Implies: Remove.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/power7/fpu/Implies: Remove.
* sysdeps/powerpc/powerpc32/970/Implies: Point to power4.
* sysdeps/powerpc/powerpc32/power5/Implies: Point to power4.
* sysdeps/powerpc/powerpc32/power5+/Implies: Point to power5.
* sysdeps/powerpc/powerpc32/power6/Implies: Point to power5+.
* sysdeps/powerpc/powerpc32/power6x/Implies: Point to power6.
* sysdeps/powerpc/powerpc64/970/Implies: Point to power4.
* sysdeps/powerpc/powerpc64/power5/Implies: Point to power4.
* sysdeps/powerpc/powerpc64/power5+/Implies: Point to power5.
* sysdeps/powerpc/powerpc64/power6/Implies: Point to power5+.
* sysdeps/powerpc/powerpc64/power6x/Implies: Point to power6.
* sysdeps/powerpc/powerpc32/power7/Implies: New file.
* sysdeps/powerpc/powerpc64/power7/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/970/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/cell/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/power4/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/power5/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/power6/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/power6x/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/power7/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/970/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/cell/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/power4/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/power5/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/power6/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/power6x/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/power7/Implies: New file.
Ryan Arnold [Fri, 11 Jun 2010 20:11:10 +0000 (15:11 -0500)]
Experimental patch to default PPC64 to no-execstack support. This will need
to be abstracted to remove the guards from common files and put the stack
initialization into a header file that can be overridden.
2010-06-11 Ryan S. Arnold <rsa@us.ibm.com>
* elf/dl-load.c (_dl_map_object_from_fd): Set default stack_flags to
no-exec for ARCH_PPC64.
* elf/dl-support.c [_dl_stack_flags]: Set default stack_flags to
no-exec for ARCH_PPC64.
* elf/rtld.c (_dl_starting_up): Set default stack_flags to no-exec for
ARCH_PPC64.
Alan Modra [Wed, 12 May 2010 04:43:15 +0000 (23:43 -0500)]
Fix PowerPC64 glibc assembly to properly work with the linker automatic
multiple toc support, which may be needed when a static libc is linked into a
large app. The requirements are: a) No tail calls are allowed to functions in
a different object file, ie. a plain branch is not allowed. b) All calls to
functions in a different object file must be followed by a nop.
On PowerPC64, the parameter save area and the cr save location for the current
function are in the previous frame, just like the lr save location. The
parameter save area, cr save location and lr save location in the current
frame are for use by *called* functions. In a number of places, glibc
assembly used the wrong area, leaving those functions at the mercy of any
called functions. We just happen to be lucky so far, but that may change with
future versions of gcc.
Eric Blake [Thu, 8 Apr 2010 00:16:27 +0000 (17:16 -0700)]
Fix -W with optional parameters in getopt.
According to the getopt documentation, if "W;" is part of optstring, then '-W
foo' should behave like '--foo'. But if "foo" uses an optional_argument, this
is not the case, since optarg is not NULL when using -W.
The getdents64 syscall adds on 32-but platforms padding which isn't needed
and not included in the userlevel data structure definition. We have to
avoid copying those padding bytes in the readdir64_r function.
Ulrich Drepper [Tue, 15 Dec 2009 20:32:27 +0000 (12:32 -0800)]
Avoid ELF lookup race.
On some architectures the update of the l_used field in the lookup
functions races with setting the other bits in the bitfield. Simply
avoid this and optimize use of l_used in general.
Ulrich Drepper [Wed, 25 Nov 2009 02:24:14 +0000 (18:24 -0800)]
Prevent unintended file desriptor leak in grantpt.
The pt_chown program is completely transparently called. It might
not be able to live with the various file descriptors the program
has open at the time of the call (e.g., under SELinux). Close all
but the needed descriptor and connect stdin, stdout, and stderr
with /dev/null. pt_chown shouldn't print anything when called to
do real work.
Jakub Jelinek [Wed, 18 Nov 2009 02:04:51 +0000 (18:04 -0800)]
Fix sync_file_range on ppc/ppc64.
I've noticed that sync_file_range is a stub on ppc/ppc64.
The kernel on these arches provides sync_file_range2 syscall with swapped
parameters.
The following completely untested patch ought to fix this.
(cherry picked from commit 8ad81b316bc158746aee18aa7d7df44d3eb61871)
Paolo Bonzini [Wed, 18 Nov 2009 00:23:24 +0000 (16:23 -0800)]
Fix ranges with multibyte characters as endpoints.
This is another bug in computing the fastmap. It was reported by a user
of sed because it usually does not happen with !_LIBC. However, it is
there in that case too.
The bug is that whenever we have a range at the beginning of the regex,
the regex must be tested on any possible multibyte character. The reason
why _LIBC masks it, is that in general there is a collation symbol for
each possible multibyte-character lead byte, so all the lead bytes are
in general already part of the fastmap.
The tests use cyrillic characters as an example. With _LIBC, they pass
without the patch too, but you can make them fail by removing collation
symbols handling.