Merge roland/nptl-hppa to master, update and test for hppa-linux-gnu.
This commit squashes and commits the work done by Roland McGrath on
roland/nptl-hppa to migrate hppa to the new non-addon NPTL. Some
additional tweaks were required for tcb-offsets.sym to work correctly
along with clone.S (unique to hppa).
In my powerpc32 testing I've observed misc/test-gettimebasefreq
failing.
This is a glibc build (soft-float, though that's not relevant here)
without any --with-cpu and without any special configuration of the
default CPU for GCC either. In particular, it's one not using
sysdeps/powerpc/powerpc32/power4/hp-timing.h (although in fact the
processor I'm using for testing is POWER4-based), so hp_timing_t is
32-bit not 64-bit. But the VDSO call being used by
INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK is generating a 64-bit result
(high part in r3, low part in r4). The code extracting that result,
however, expects a result of the type hp_timing_t as passed to
INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK, meaning that only r3 (= 0) is
used and the value in r4 is ignored. This patch fixes this by always
using uint64_t as the type in INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK -
reflecting the actual ABI (unconditional in the kernel) of that VDSO
call. This is the minimal change for this issue - no check for
overflow, no change of the type of the timebase_freq variable or the
return type of __get_clockfreq to something other than hp_timing_t
(such a change would simply move the implicit conversions to the over
callers of that function), no change to hp_timing_t itself.
Tested for powerpc32 soft float.
[BZ #17263]
* sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c: Include
<stdint.h>.
(__get_clockfreq): Use uint64_t instead of hp_timing_t in
INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK call.
This patch fixes the incorrect guard by __USE_MISC of struct winsize and
struct termio in powerpc termios header. Current states leads to build
failures if the program defines _XOPEN_SOURCE, but not _DEFAULT_SOURCE
or either _BSD_SOURCE or _SVID_SOURCE. Without any definition,
__USE_MISC will not be defined and neither the struct definitions.
This patch copies the default Linux ioctl-types.h by adjusting only the
character control field (c_cc) size in struct termio.
Use the SSI_IEEE_RAISE_EXCEPTION function as from feraiseexcept,
instead of __ieee_get+set_fp_status. Always raise the FP exceptions
from float-to-integer conversion.
Remove lowlevellock.h in favour of the generic implementation. The
generic implementation was tested natively and introduces no
regressions.
ChangeLog:
2014-08-04 Will Newton <will.newton@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/lowlevellock.h: Remove
file.
The previous set of not-cancel.h headers (prior to the commit
2fbdf5339a) did not require the
arch to define nocancel entry points, so ia64 never did.
However, after the various files were merged, it became a hard
requirement for arches which mean ia64 failed to build.
Here we add dedicated entry points. It'd be nice to merge
with the existing stubs like other arches do, but the ia64
asm does not lend itself to interleaving of functions. If
someone has a suggestion on merging these, that'd be great,
but at least now we build & pass tests again.
Open file description locks have been merged into the Linux kernel for
v3.15. Add the appropriate command-value definitions and an update to
the manual that describes their usage.
This patch splits s390 out of the main Linux kernel-features.h.
Not tested.
* sysdeps/unix/sysv/linux/s390/kernel-features.h: New file.
* sysdeps/unix/sysv/linux/kernel-features.h [__s390__]
(__ASSUME_SOCKETCALL): Do not define.
This patch splits sh out of the main Linux kernel-features.h.
Not tested.
* sysdeps/unix/sysv/linux/sh/kernel-features.h: New file.
* sysdeps/unix/sysv/linux/kernel-features.h [__sh__]
(__ASSUME_SOCKETCALL): Do not define.
(__ASSUME_ST_INO_64_BIT): Define unconditionally.
[__LINUX_KERNEL_VERSION >= 0x020625 && __sh__]
(__ASSUME_ACCEPT4_SYSCALL): Do not define.
[__LINUX_KERNEL_VERSION >= 0x020625 && __sh__]
(__ASSUME_RECVMMSG_SYSCALL): Likewise.
[__LINUX_KERNEL_VERSION >= 0x030000 && __sh__]
(__ASSUME_SENDMMSG_SYSCALL): Likewise.
[__sh__] (__ASSUME_SENDMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
This patch splits powerpc out of the main Linux kernel-features.h.
Not tested.
* sysdeps/unix/sysv/linux/powerpc/kernel-features.h: New file.
* sysdeps/unix/sysv/linux/kernel-features.h [__powerpc__]
(__ASSUME_SOCKETCALL): Do not define.
(__ASSUME_IPC64): Define unconditionally.
[__LINUX_KERNEL_VERSION >= 0x020625 && __powerpc__]
(__ASSUME_ACCEPT4_SYSCALL): Do not define.
[__LINUX_KERNEL_VERSION >= 0x020625 && __powerpc__]
(__ASSUME_RECVMMSG_SYSCALL): Likewise.
[__LINUX_KERNEL_VERSION >= 0x030000 && __powerpc__]
(__ASSUME_SENDMMSG_SYSCALL): Likewise.
[__powerpc__] (__ASSUME_SENDMMSG_SYSCALL_WITH_SOCKETCALL):
Likewise.
This patch splits sparc out of the main Linux kernel-features.h.
Not tested.
* sysdeps/unix/sysv/linux/sparc/kernel-features.h: New file.
* sysdeps/unix/sysv/linux/kernel-features.h [__sparc__]
(__ASSUME_SOCKETCALL): Do not define.
(__ASSUME_SET_ROBUST_LIST): Define unconditionally.
(__ASSUME_FUTEX_LOCK_PI): Likewise.
[__sparc__] (__ASSUME_ACCEPT4_SYSCALL): Do not define.
[__sparc__] (__ASSUME_ACCEPT4_SYSCALL_WITH_SOCKETCALL): Likewise.
(__ASSUME_REQUEUE_PI): Define unconditionally.
[__LINUX_KERNEL_VERSION >= 0x020621 && __sparc__]
(__ASSUME_RECVMMSG_SYSCALL): Do not define.
[__sparc__] (__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
[__LINUX_KERNEL_VERSION >= 0x030000 && __sparc__]
(__ASSUME_SENDMMSG_SYSCALL): Likewise.
[__sparc__] (__ASSUME_SENDMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
This patch splits i386 out of the main Linux kernel-features.h.
Tested x86 that there are no changes to disassembly of installed
shared libraries.
* sysdeps/unix/sysv/linux/i386/kernel-features.h: New file.
* sysdeps/unix/sysv/linux/kernel-features.h [__i386__]
(__ASSUME_SOCKETCALL): Do not define.
[__LINUX_KERNEL_VERSION >= 0x020621 && __i386__]
(__ASSUME_RECVMMSG_SYSCALL): Likewise.
[__i386__] (__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
[__LINUX_KERNEL_VERSION >= 0x030000 && __i386__]
(__ASSUME_SENDMMSG_SYSCALL): Likewise.
[__i386__] (__ASSUME_SENDMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
This patch splits x86_64 out of the main Linux kernel-features.h.
Tested x86_64 that there are no changes to disassembly of installed
shared libraries.
* sysdeps/unix/sysv/linux/x86_64/kernel-features.h: New file.
* sysdeps/unix/sysv/linux/kernel-features.h [__x86_64__]
(__ASSUME_ACCEPT4_SYSCALL): Do not define.
[__LINUX_KERNEL_VERSION >= 0x020621 && __x86_64__]
(__ASSUME_RECVMMSG_SYSCALL): Likewise.
[__LINUX_KERNEL_VERSION >= 0x030000 && __x86_64__]
(__ASSUME_SENDMMSG_SYSCALL): Likewise.
[__x86_64__ && __LINUX_KERNEL_VERSION >= 0x030100]
(__ASSUME_GETCPU_SYSCALL): Likewise.
This patch continues removing architecture-specific cases from
non-architecture-specific files by moving the logic to use directories
such as /lib64 out of sysdeps/gnu/configure.ac.
A new macro LIBC_SLIBDIR_RTLDDIR is created that sysdeps configure
scripts can use to declare the library directories to be used; the
logic was previously duplicated in configure fragments for aarch64,
mips and x32 as well as in sysdeps/gnu/configure.ac. This macro is
used directly in sysdeps/gnu/configure.ac only to provide the /lib
default (the logic saying that with --prefix=/usr shared libraries go
in /lib not /usr/lib); the architecture cases formerly there are moved
into various new or existing configure.ac files. The new macro is
also used in the various architecture fragments that already had such
logic. In the x32 there was previously a configure fragment, but it
was a directly written one without a .ac file; now a .ac file is used
there instead to generate configure.
Tested x86_64 that the installed shared libraries, and the directory
structure of the installation, are unchanged by this patch.
There is an old bug report - bug 6441 - about library directories
changing after reconfiguring. If this is still applicable - and I
haven't attempted to confirm it or review the old patch pointed to in
that bug - then this patch should reduce the number of places needing
changing in any fix.
* aclocal.m4 (LIBC_SLIBDIR_RTLDDIR): New macro.
* sysdeps/gnu/configure.ac: Use LIBC_SLIBDIR_RTLDDIR. Remove
cases for individual architectures.
* sysdeps/gnu/configure: Regenerated.
* sysdeps/unix/sysv/linux/aarch64/configure.ac: Use
LIBC_SLIBDIR_RTLDDIR.
* sysdeps/unix/sysv/linux/aarch64/configure: Regenerated.
* sysdeps/unix/sysv/linux/mips/configure.ac: Use
LIBC_SLIBDIR_RTLDDIR.
* sysdeps/unix/sysv/linux/mips/configure: Regenerated.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac: Use
LIBC_SLIBDIR_RTLDDIR.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/configure:
Regenerated.
* sysdeps/unix/sysv/linux/s390/s390-64/configure.ac: New file.
* sysdeps/unix/sysv/linux/s390/s390-64/configure: New generated
file.
* sysdeps/unix/sysv/linux/sparc/sparc64/configure.ac: New file.
* sysdeps/unix/sysv/linux/sparc/sparc64/configure: New generated
file.
* sysdeps/unix/sysv/linux/x86_64/64/configure.ac: New file.
* sysdeps/unix/sysv/linux/x86_64/64/configure: New generated file.
* sysdeps/unix/sysv/linux/x86_64/x32/configure.ac: New file.
* sysdeps/unix/sysv/linux/x86_64/x32/configure: Generate.
Various architectures have files such as sysdeps/<arch>/shlib-versions
whose contents are in fact entirely Linux-specific, relating only to
the symbol / shared library versions for the port to Linux on that
architecture, when any future port to a different OS on that
architecture would use the symbol version of the glibc release it goes
in, as standard for new ports.
This patch moves such files under sysdeps/unix/sysv/linux/, merging in
the contents of sysdeps/<arch>/nptl/shlib-versions in the process.
The only bits not moved are those relating to libgcc_s versions, which
don't appear OS-specific in the same way that glibc's symbol versions
so. It deliberately does not change the regular expressions given for
matching configurations in each file; some match only Linux although
not Linux-specific, or match other OSes although Linux-specific. It
is with a view to at least the following further cleanups:
* Move architecture-specific content from the toplevel shlib-versions
and nptl/shlib-versions into sysdeps shlib-versions files, so
eliminating another difference between ex-ports and non-ex-ports
architectures.
* Likewise, for OS-specific content in shlib-versions files.
* At that point, the first field in shlib-versions files (the regular
expression matching a configuration triplet) should be redundant, so
eliminate that field and leave shlib-versions selection working
purely on a sysdeps basis (with limited use of %ifdef in
shlib-versions files when needed) rather than having its own
separate mechanism to select what configuration information is
relevant.
* Move the build of gnu/lib-names.h to a similar mechanism to that
used for gnu/stubs.h (each library build installing a version of the
header specifically for that build), so we can eliminate the
duplication of soname information in the makefiles and get it purely
from shlib-versions files again.
There may be other cleanups possible as well (in particular, I'm not
sure that all cases where the same "Earliest symbol set" information
is repeated for many different libraries actually should need to
repeat it rather than specifying it just once for DEFAULT for the
given configuration, and separately specifying any non-default choices
of soname).
Tested x86_64 that the installed shared libraries are unchanged by
this patch.
* sysdeps/aarch64/shlib-versions: Move to ...
* sysdeps/unix/sysv/linux/aarch64/shlib-versions: ... here.
* sysdeps/alpha/shlib-versions: Move to ...
* sysdeps/unix/sysv/linux/alpha/shlib-versions: ... here.
* sysdeps/arm/shlib-versions: Move to ...
* sysdeps/unix/sysv/linux/arm/shlib-versions: ... here.
* sysdeps/hppa/shlib-versions: Move all contents except for
libgcc_s entry to ...
* sysdeps/unix/sysv/linux/hppa/shlib-versions: ... here. Merge in
entry from ...
* sysdeps/hppa/nptl/shlib-versions: ... here. Remove file.
* sysdeps/ia64/shlib-versions: Move to ...
* sysdeps/unix/sysv/linux/ia64/shlib-versions: ... here. Merge in
entry from ...
* sysdeps/ia64/nptl/shlib-versions: ... here. Remove file.
* sysdeps/m68k/coldfire/shlib-versions: Move to ...
* sysdeps/unix/sysv/linux/m68k/coldfire/shlib-versions: ... here.
* sysdeps/microblaze/shlib-versions: Move to ...
* sysdeps/unix/sysv/linux/microblaze/shlib-versions: ... here.
* sysdeps/mips/shlib-versions: Move to ...
* sysdeps/unix/sysv/linux/mips/shlib-versions: ... here. Merge in
entry from ...
* sysdeps/mips/nptl/shlib-versions: ... here. Remove file.
* sysdeps/tile/shlib-versions: Move to ...
* sysdeps/unix/sysv/linux/tile/shlib-versions: ... here.
* sysdeps/unix/sysv/linux/x86_64/64/shlib-versions: Merge in entry
from ...
* sysdeps/x86_64/64/shlib-versions: ... here. Remove file.
* sysdeps/unix/sysv/linux/x86_64/x32/shlib-versions: Merge in
entry from ...
* sysdeps/x86_64/x32/shlib-versions: ... here. Remove file.
Commit 887865f remove the lll_robust_trylock definition on all
architectures, however for powerpc both __lll_trylock and
__lll_cond_trylock were based on lll_robust_trylock definition.
This patch restore it with a different name.
Here's an updated patch to fix the crash in bug-ga2 when the system
has no configured ipv6 address. I have taken a different approach of
using libc_freeres_fn instead of the libc_freeres_ptr since the former
gives better control over what is freed; we need that since cache may
or may not be allocated using malloc.
Verified that bug-ga2 works correctly in both cases and does not have
memory leaks in either of them.
This commit removes the aio_cancel and aio_cancel64 symbols at
GLIBC_2.3 from the ABI baseline. The ABI baseline is now complete
for hppa and considered stable.
The following ABI baselines were tested against several old releases
of debian and gentoo. Several problems were discovered and fixed as
part of developing the ABI baselines.
Firstly, libBrokenLocale on gentoo exports __ctype_get_mb_cur_max
as @@GLIBC_2.0, but it should be @@GLIBC_2.2 since that's the minimum
version defined in shlib-versions for hppa. I don't know when this
broke, but master properly parses hppa's shlib-versions which clearly
lists libBrokenLocale as defaulting to GLIBC_2.2. Therefore I'm
accepting GLBIC_2.2 as the correct version for this symbol and setting
the baseline to that, despite the fact that the present distribution
is wrong. I don't expect that any new applications should be using
libBrokenLocale, so it should match the oldest behaviour which is to
export a GLIBC_2.2 symbol. For example in debian's 2.7 has it at
version GLIBC_2.2.
Secondly, aio_cancel and aio_cancel64 previously had a compat symbol
at version @GLIBC_2.1 with a new symbol at @@GLIBC_2.3[1]. During the
Linuxthreads to NPTL transition the file aio_cancel.c was lost for hppa
and that resulted in just @@GLIBC_2.1 versions of these symbols being
exported. The @@GLIBC_2.1 version works correctly and uses the right
value of ECANCELLED. Therefore if I were to fix this today it might
break correctly working applications using aio_cancel*@GLIBC_2.1 by
causing those to use the old aio_cancel that used the older value
of ECANCELLED. Thus the best option is to accept that the ABI changed
and ignore older applications in favour of newer applications. The
best thing to do is cleanup the version files (included in the patch).
The rest of the ABI was as expected (ignoring __p_type_syms size
change in 2008).
Now that the MicroBlaze 3.15 kernel has the pselect6, preadv and
pwritev syscalls, this patch updates kernel-features.h so they are
assumed to be present for 3.15 and later kernels.
2014-06-17 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/microblaze/kernel-features.h
[__LINUX_KERNEL_VERSION >= 0x030f00] (__ASSUME_PSELECT): Do not
undefine.
[__LINUX_KERNEL_VERSION >= 0x030f00] (__ASSUME_PREADV): Likewise.
[__LINUX_KERNEL_VERSION >= 0x030f00] (__ASSUME_PWRITEV): Likewise.
Signed-off-by: David Holsgrove <david.holsgrove@xilinx.com>