The function __set_cr27() uses the `ble`
instruction without marking the link register
r31 as clobbered. This change adds r31 to the
list of clobbers. The TLS thread register is
cr27 and is set by calling __set_cr27().
The initial implementation of makecontext()
supported only 8 arguments. This change adds
support for unlimited argument processing given
a large enough stack.
Adjust the value of SOCK_CLOEXEC to match the kernel
value used for accept4. This has never worked in the
past, and all old applications are broken, therefore
we change this value to match the kernel value.
Update F_SETOWN_EX and F_GETOWN_EX. Rearrange
the file to match other targets, reducing future
diffs against other targets and making maintenance
easier.
microMIPS is a variable-length encoding of the MIPS32 instruction set
(plus some extra instructions). As it supports almost all of MIPS32,
assembly sources in glibc do not generally need changes to work with
microMIPS, but dl-trampoline.c contains some code with a hardcoded
assumption that three instructions occupy twelve bytes. This patch
fixes this code for microMIPS by using the difference between two
labels to let the assembler calculate the relevant length.
Similar to the problems I fixed for posix_fallocate
<http://sourceware.org/ml/libc-ports/2008-12/msg00007.html> and
fallocate <http://sourceware.org/ml/libc-ports/2009-05/msg00031.html>,
MIPS64 posix_advise also needs fixes to use the correct syscall
interfaces. Although the existing n32 posix_fadvise64 is OK, getting
posix_fadvise from syscalls.list does not work correctly, as this
function is supposed to return an error code instead of storing it in
errno as the generic syscall implementations from syscalls.list do.
In the switch to NPTL the pthrad_mutex_t, pthread_cond_t,
and pthread_rwlock_t structures were made binary compatible
with the Linuxthread versions. However, their aligment when
embedded in other structures was changed. When rebuilding
libstdc++ this was detected, and the following changes return
the structures to their original Linuxthreads alignments.
2009-11-25 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h:
Use correct alignment for pthread_mutex_t, pthread_cond_t,
and pthread_rwlock_t.
Cast oldval to the same type as ret to avoid warnings when
including atomic.h.
2009-11-22 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/bits/atomic.h: Avoid warnings
by casting oldval to int.
Place socket.h in the correct location.
2009-11-15 Carlos O'Donell <carlos@codesourcery.com>
[BZ #6676]
* sysdeps/unix/sysv/linux/hppa/socket.h: Move from here...
* sysdeps/unix/sysv/linux/hppa/bits/socket.h: ... to here.
The current ELF_MACHINE_LOAD_ADDRESS used by the generic
function pointer code was not safe for use before relocation.
The macro has been rewritten to use only PC relative loads.
2009-11-15 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/hppa/dl-fptr.h: Update copyright year.
Reduce ELF_MACHINE_BOOT_FPTR_TABLE_LEN to 64.
Implement ELF_MACHINE_LOAD_ADDRESS using PC relative loads.
Several constants are now defined in a generic file and no longer
need to be defined in the hppa specific file.
2009-11-15 Carlos O'Donell <carlos@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h:
Remove FUTEX_WAITERS, FUTEX_OWNER_DIED, and FUTEX_TID_MASK.
[BZ #10527] Provide corrected socket constants that match the
kernel values.
2009-11-15 Carlos O'Donell <carlos@codesourcery.com>
Aurelian Jarno <aurelien@aurel32.net>
[BZ #10527]
* sysdeps/unix/sysv/linux/hppa/socket.h: New file.
[BZ #6676] Use PIC relocations in start.S to support the use of -fPIE
on hppa.
2009-11-15 Carlos O'Donell <carlos@codesourcery.com>
[BZ #6676]
* sysdeps/hppa/elf/start.S: Use R_PARISC_DLTIND* relocations
to support -fPIE.
[BZ #10920] Use the new generic override to specify the hppa
specific libgcc_s.so.4 version number. Remove the files which
hppa no longer has to duplicate in order to accomplish
overriding libgcc_s.so version number.
2009-11-08 Carlos O'Donell <carlos@codesourcery.com>
[BZ #10920]
* sysdeps/hppa/libgcc_s.h: New file.
* sysdeps/unix/sysv/linux/hppa/nptl/unwind-forcedunwind.c: Remove.
* sysdeps/unix/sysv/linux/hppa/nptl/unwind-resume.c: Remove.
Ensure that all objects in ARM EABI glibc have the proper EABI build
attributes to indicate that 8-byte stack alignment is required and
preserved. (GNU ld does not currently give errors for mixing code
requiring 8-byte alignment - such as anything built with GCC - and
code not marked as preserving it, because of the prevalence of
assembly code without proper markers to indicate that alignment is
preserved. The ARM RealView linker does give such errors.)
The bulk of the markers are accomplished by the change to sysdep.h,
but a few .S files do not include sysdep.h. In the case of
internal_accept4.S, no code is generated because EABI does not have
socketcall, but for completeness a dummy file with the right
attributes is used to override the default version in libc.
* sysdeps/arm/sysdep.h: (Tag_ABI_align8_preserved,
Tag_ABI_align8_needed): Attributes added.
* sysdeps/arm/elf/start.S: Likewise.
* sysdeps/arm/eabi/abi-note.S: New file.
* sysdeps/unix/sysv/linux/arm/eabi/internal_accept4.S: New
file.
* setjmp and longjmp were using the obsolete fstmiax and fldmiax
instructions.
* Because of a confusion with two different sets of names for the same
registers (r0...r3 and a1...a4), if VFP was present then the
subsequent check for iWMMXt support would use a register that had
been clobbered by saving/restoring the VFP registers. (The bit
being checked was clobbered by a reserved bit of FPSCR that it
always 0 on present hardware, and no present hardware has both VFP
and iWMMXt, so this did not cause visible problems.)
2009-10-22 Andrew Stubbs <ams@codesourcery.com>
Julian Brown <julian@codesourcery.com>
* sysdeps/arm/eabi/setjmp.S (__sigsetjmp): Replace deprecated
instruction fstmiax with vstmia.
Correct register conflict and comment.
* sysdeps/arm/eabi/__longjmp.S (__longjmp): Use vldmia not fldmiax.
Don't clobber r1/a2 register before testing IWMMXT hwcap.
This version of the NPTL POSIX thread ABI for hppa does
not break backwards compatibility with the the old
Linuxthreads ABI, and is therefore suitable for release
by distributions.
sysdeps/unix/sysv/linux/hppa/
* internaltypes.h: New file.
sysdeps/unix/sysv/linux/hppa/nptl/
* pthreadP.h: New file.
* pthread.h: New file.
* pthread_cond_broadcast.c: New file.
* pthread_cond_destroy.c: New file.
* pthread_cond_init.c: New file.
* pthread_cond_signal.c: New file.
* pthread_cond_timedwait.c: New file.
* pthread_cond_wait.c: New file.
* bits/pthreadtypes.h: Make pthread_mutex_t,
pthread_rwlock_t, and pthread_cond_t backwards
compatible.
* sysdeps/mips/____longjmp_chk.c: Remove. Replaced by....
* sysdeps/unix/sysv/linux/mips/____longjmp_chk.c: This. New file.
* sysdeps/mips/__longjmp.c (__longjmp): Use explicit register
variable for env. Use expansion of CHECK_SP macro for check.
* sysdeps/mips/mips64/__longjmp.c (__Longjmp): Likewise.
sysdeps/unix/sysv/linux/internal_accept4.S expects socket.S to be
present if __NR_socketcall is defined (which it is on MIPS o32, even
though there are separate syscalls as well) and __NR_accept4 isn't.
MIPS does not have socket.S, since it uses separate syscalls, but
though the accept4 syscall should be added soon present kernel headers
do not have it. This patch creates a dummy internal_accept4.S for
MIPS o32, and an accept4.c wrapper that undefines __NR_socketcall so
that the main accept4.c falls back to the ENOSYS implementation if
__NR_accept4 isn't defined; it doesn't seem worthwhile to have a
special socketcall-based assembly implementation just for o32 on a few
kernels in the range between accept4 being available via socketcall
and the accept4 syscall being available.
* sysdeps/arm/eabi/aeabi_lcsts.c (__aeabi_stdin, __aeabi_stdout,
__aeabi_stderr): New variables.
(setup_aeabi_stdio): New function. Add it to .preinit_array.
* sysdeps/mips/____longjmp_chk.c: New file.
* sysdeps/mips/__longjmp.c: If CHECK_SP is defined, use it. Don't
undefine __longjmp.
* sysdeps/mips64/__longjmp.c: Likewise.
* sysdeps/unix/sysv/linux/hppa/nptl/unwind-forcedunwind.c:
Update from nptl/sysdeps/pthread/unwind-forcedunwind.c
* sysdeps/unix/sysv/linux/hppa/nptl/unwind-resume.c:
Update from nptl/sysdeps/pthread/unwind-resume.c
* sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
(libgcc_s_handle): New variable.
(pthread_cancel_init): Depend in libgcc_s_handle for decision to
load DSO. Assign last.
(__unwind_freeres): New function.
* sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c:
Likewise.
* sysdeps/unix/sysv/linux/hppa/nptl/unwind-forcedunwind.c
(libgcc_s_handle): New variable.
(pthread_cancel_init): Depend in libgcc_s_handle for decision to
load DSO. Assign last.
(__unwind_freeres): New function.
Joseph Myers <joseph@codesourcery.com>
* sysdeps/arm/dl-machine.h (elf_machine_dynamic): Ditto.
(elf_machine_load_address): Clear T bit of PLT entry contents.
(RTLD_START): Mark function symbols as such. Tweak pc-relative
addressing to avoid depending on pc read pipeline offset.
* sysdeps/arm/machine-gmon.h (MCOUNT): Add Thumb-2 implementation.
* sysdeps/arm/tls-macros.h: Add alignment for Thumb-2.
(ARM_PC_OFFSET): Define.
(TLS_IE): Define differently for Thumb-2.
(TLS_LE, TLS_LD, TLS_GD): Use ARM_PC_OFFSET.
* sysdeps/arm/elf/start.S: Switch to thumb mode for Thumb-2.
* sysdeps/unix/sysv/linux/arm/eabi/sysdep.h (INTERNAL_SYSCALL_RAW):
Add Thumb implementation.
* sysdeps/unix/sysv/linux/arm/eabi/nptl/aio_misc.h: New.
* sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-resume.c: Enforce
alignment for Thumb-2. Adjust offset from PC for Thumb-2.
* sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c: Ditto.
* sysdeps/unix/sysv/linux/arm/nptl/bits/atomic.h (atomic_full_barrier,
__arch_compare_and_exchange_val_32_acq): Add Thumb-2 implementation.
* sysdeps/unix/sysv/linux/mips/dl-static.c: New file to support
variable page size for MIPS.
* sysdeps/unix/sysv/linux/mips/ldsodefs.h: Likewise.
* sysdeps/unix/sysv/linux/mips/Makefile: Build dl-static in elf.
* sysdeps/unix/sysv/linux/mips/Versions: Add _dl_var_init.
* sysdeps/unix/sysv/linux/alpha/wordexp.c: Contents moved to main
repository's ia64 file; #include that.
* sysdeps/unix/sysv/linux/alpha/ipc_priv.h: Contents moved to main
repository's powerpc file; #include that.
* sysdeps/alpha, sysdeps/unix/bsd/osf/alpha,
sysdeps/unix/bsd/Attic/osf1/alpha, sysdeps/unix/sysv/linux/alpha,
sysdeps/unix/sysv/linux/alpha/alpha, sysdeps/unix/alpha,
sysdeps/mach/alpha, sysdeps/mach/hurd/alpha:
Subdirectories moved here from main repository.
* sysdeps/alpha/nptl, sysdeps/unix/sysv/linux/alpha/nptl:
Subdirectories moved here from main repository's nptl/ subdirectory.
* sysdeps/alpha/preconfigure: New file.
* sysdeps/alpha/shlib-versions: New file.
SOCK_NONBLOCK, PF_ISDN and AF_ISDN.
* sysdeps/unix/sysv/linux/mips/sys/epoll.h: New file.
* sysdeps/unix/sysv/linux/mips/sys/eventfd.h: New file.
* sysdeps/unix/sysv/linux/mips/sys/inotify.h: New file.
* sysdeps/unix/sysv/linux/mips/sys/signalfd.h: New file.
* sysdeps/unix/sysv/linux/mips/sys/timerfd.h: New file.
* data/localplt-arm-linux-gnueabi.data: New.
* sysdeps/arm/bsd-_setjmp.S: Use HIDDEN_JUMPTARGET to call
__sigsetjmp.
* sysdeps/arm/bsd-setjmp.S: Likewise.
* sysdeps/arm/eabi/aeabi_localeconv.c: Use __localeconv.
* sysdeps/arm/eabi/find_exidx.c (__gnu_Unwind_Find_exidx): Use
__dl_iterate_phdr.
* sysdeps/arm/eabi/setjmp.S: Add hidden_def (__sigsetjmp).
* sysdeps/arm/memmove.S: Use HIDDEN_JUMPTARGET to call memcpy from
within libc.
* sysdeps/arm/setjmp.S: Add hidden_def (__sigsetjmp).
* sysdeps/unix/sysv/linux/arm/clone.S: Use HIDDEN_JUMPTARGET to
call _exit.
* sysdeps/unix/sysv/linux/arm/ioperm.c (init_iosys): Use __sysctl,
__readlink and fgets_unlocked.
(_ioperm): Use __open and __close.
* sysdeps/m68k/bits/byteswap.h: Allow inclusion from <endian.h>.
(__bswap_constant_16): Define.
(__bswap_16): Allow arguments with side effects.
(__bswap_constant_32): Ensure result is unsigned.
(__bswap_32): Define as inline function in fallback case.
(__bswap_constant_64): Define.
(__bswap_64): Use it for constant arguments.
* sysdeps/m68k/bits/setjmp.h (__jmp_buf): Give name to structure
type.
* sysdeps/m68k/m680x0/fpu/bits/mathinline.h: Only allow inclusion
from <math.h>. Do not use extern inline directly.
* sysdeps/unix/sysv/linux/m68k/bits/fcntl.h: Include <bits/uio.h>.
(O_CLOEXEC, SYNC_FILE_RANGE_WAIT_BEFORE, SYNC_FILE_RANGE_WRITE,
SYNC_FILE_RANGE_WAIT_AFTER, SPLICE_F_MOVE, SPLICE_F_NONBLOCK,
SPLICE_F_MORE, SPLICE_F_GIFT): Define.
(sync_file_range, vmsplice, splice, tee): Declare.
* sysdeps/unix/sysv/linux/m68k/bits/mman.h (MADV_REMOVE): Define.
* sysdeps/unix/sysv/linux/m68k/bits/poll.h (POLLMSG, POLLREMOVE,
POLLRDHUP): Define.
* sysdeps/unix/sysv/linux/m68k/bits/stat.h (UTIME_NOW,
UTIME_OMIT): Define.
* sysdeps/unix/sysv/linux/m68k/kernel-features.h: New.
* sysdeps/unix/sysv/linux/m68k/sys/user.h: New.
* sysdeps/unix/sysv/linux/hppa/ucontext_i.sym: New file.
* sysdeps/unix/sysv/linux/hppa/Makefile: New file.
* sysdeps/unix/sysv/linux/hppa/getcontext.S: New file.
* sysdeps/unix/sysv/linux/hppa/makecontext.c: New file.
* sysdeps/unix/sysv/linux/hppa/setcontext.S: New file.
* sysdeps/unix/sysv/linux/hppa/swapcontext.c: New file.
* sysdeps/arm/eabi/fgetexcptflg.c: New.
* sysdeps/arm/eabi/fsetexcptflg.c (__fesetexceptflag): Operate on
set exception flags, not on mask of enabled exceptions.
Carlos O'Donell <carlos@systemhalted.org>
[BZ #6037]
* sysdeps/unix/sysv/linux/hppa/bits/atomic.h: Check for -11
(-EAGAIN) instead of 11. Loop again when the kernel
returns -45 (-EDEADLOCK). Add back memory clobber.
Do not initialize lws_ret and lws_errno.
* sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list: Add
truncate and ftruncate systems calls.
* sysdeps/unix/sysv/linux/mips/mips64/n32/ftruncate64.c: Make an
empty file.
* sysdeps/unix/sysv/linux/mips/mips64/n32/truncate64.c: Ditto.
Explicitly get address of _DYNAMIC.
* sysdeps/m68k/dl-machine.h (elf_machine_dynamic): Retrieve _DYNAMIC
from GOT instead of assuming value at GOT pointer.
Reorganize to match other architectures. Replace _timer._timer1
and _timer._timer2 with _timer.si_tid, _timer.si_overrun, and
_timer.si_sigval. Correct the type of _sigpoll.si_band.
(si_timerid, si_overrun): Define.
(__SIGEV_PAD_SIZE): Correct for __WORDSIZE == 64.
(__pthread_attr_s): Remove declaration.
(struct sigevent): Remove XXX. Add _tid.
type and __THROW marker of splice, vmsplice, and tee.
* sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Correct return value
type and __THROW marker of splice, vmsplice, and tee.
lll_futex_wake not lll_private_futex_wake.
* sysdeps/unix/sysv/linux/arm/bits/fcntl.h (O_CLOEXEC): Define.
* sysdeps/unix/sysv/linux/arm/eabi/sysdep.h: Include <tls.h>
* sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c
(__lll_lock_wait_private, __lll_lock_wait): New.
(__lll_timedlock_wait): Don't include in libc.so; Take private
argument. Use atomic_compare_and_exchange_bool_acq.
* sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h: Renamed all
lll_mutex_* resp. lll_robust_mutex_* macros to lll_*
resp. lll_robust_*. Renamed all LLL_MUTEX_LOCK_* macros to
LLL_LOCK_*. Include <kernel-features.h>.
(LLL_LOCK_INITIALIZER): Remove duplicate definition.
(__lll_private_flag): Define.
(lll_futex_timed_wait): Pass private flag to syscall.
(lll_futex_wake): Likewise.
(lll_private_futex_wait, lll_private_futex_timed_wait,
lll_private_futex_wake): Remove.
(lll_robust_dead, lll_futex_requeue): Take private arguments.
(lll_futex_wake_unlock): Pass private flag to syscall.
(__lll_robust_trylock): Convert to macro.
(__lll_robust_lock_wait): Add private argument.
(__lll_lock_wait_private, __lll_lock_wait): Declare.
(__lll_lock): Convert to macro. Take private argument.
(__lll_cond_lock): Likewise.
(lll_lock, lll_cond_lock): Take private arguments.
(__lll_robust_lock): Take private argument.
(__lll_timedlock_wait, __lll_robust_timedlock_wait): Take private
arguments.
(__lll_timedlock, __lll_robust_timedlock): Convert to macros.
Take private arguments.
(lll_timedlock, lll_robust_timedlock): Take private arguments.
(__lll_unlock, __lll_robust_unlock): Convert to macros. Take
private arguments.
(lll_unlock, lll_robust_unlock): Take private arguments.
(__lll_mutex_unlock_force, lll_mutex_unlock_force, lll_lock_t,
lll_trylock, lll_lock, lll_unlock, lll_islocked): Remove.
(lll_wait_tid): Pass LLL_SHARED to lll_futex_wait.
(__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake,
__lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait,
lll_cond_wake, lll_cond_broadcast): Remove.
* sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c
(clear_once_control, __pthread_once): Use lll_futex_wake not
lll_private_futex_wake.
clobber other exceptions.
* sysdeps/powerpc/nofpu/feupdateenv.c (__feupdateenv): Raise new
exceptions.
* sysdeps/powerpc/nofpu/fraiseexcpt.c (__feraiseexcept): Handle
multiple new exceptions if some are disabled.
* sysdeps/powerpc/nofpu/sim-full.c (__simulate_exceptions): Likewise.
Add libc_hidden_proto.
(STRTOF): Add libc_hidden_proto.
(___new_strtold_l, ___new_wcstold_l): New weak aliases.
(strtold_l, wcstold_l): Use them as second argument for
long_double_symbol.
nptl/
* sysdeps/unix/sysv/linux/alpha/lowlevellock.h (__lll_unlock,
__lll_robust_unlock): Rewrite as macros instead of inline functions.
* sysdeps/unix/sysv/linux/s390/lowlevellock.h (__lll_unlock,
__lll_robust_unlock, __lll_wait_tid): Likewise.