27 Commits
Author SHA1 Message Date
Bobby BinghamandRich Felker e8e780af98 fix signature of function accepted by makecontext
This parameter was incorrectly declared to be a pointer to a function
accepting zero parameters.  The intent of makecontext is that it is
possible to pass integer parameters to the function, so this should
have been a pointer to a function accepting an unspecified set of
parameters.
2019-04-05 17:29:00 -04:00
Bobby BinghamandRich Felker 1dd915c370 update line discipline constants 2019-02-07 12:43:22 -05:00
Bobby BinghamandRich Felker 3517d74a5e move arch-invariant definitions out of bits/ioctl.h 2019-02-07 12:43:19 -05:00
Bobby BinghamandRich Felker c21051e90c prevent fork's errno from being clobbered by atfork handlers
If the syscall fails, errno must be set correctly for the caller.
There's no guarantee that the handlers registered with pthread_atfork
won't clobber errno, so we need to ensure it gets set after they are
called.
2017-11-10 19:27:57 -05:00
Bobby BinghamandRich Felker e31c8c2d79 ppc64: fix setjmp/longjmp handling of TOC pointer
The TOC pointer is constant within a single dso, but needs to be saved
and restored around cross-dso calls.  The PLT stub saves it to the
caller's stack frame, and the linker adds code to the caller to restore
it.

With a local call, as within a single dso or with static linking, this
doesn't happen and the TOC pointer is always in r2.  Therefore,
setjmp/longjmp need to save/restore the TOC pointer from/to different
locations depending on whether the call to setjmp was a local or non-local
call.

It is always safe for longjmp to restore to both r2 and the caller's stack.
If the call to setjmp was local, and only r2 matters and the stack location
will be ignored, but is required by the ABI to be reserved for the TOC
pointer.  If the call was non-local, then only the stack location matters,
and whatever is restored into r2 will be clobbered anyway when the caller
reloads r2 from the stack.

A little extra care is required for sigsetjmp, because it uses setjmp
internally.  After the second return from this setjmp call, r2 will contain
the caller's TOC pointer instead of libc's TOC pointer.  We need to save
and restore the correct libc pointer before we can tail call to
__sigsetjmp_tail.
2017-08-11 20:31:33 -04:00
Bobby BinghamandRich Felker 5555041668 s390x: provide sigcontext struct definition
This structure was missed when creating the s390x port.

This is based on the report and patch from William Pitcock, but with a
modified structure defintion to more closely match the kernel's
definition.
2017-04-22 19:26:05 -04:00
Bobby BinghamandRich Felker 9201c3afce s390x: implement dlsym
This was missed when writing the port initially.
2017-02-15 16:54:51 -05:00
Bobby BinghamandRich Felker c1020cf21e fix crashing sigsetjmp on s390x
the bz instruction that was wrongly used only admits a small immediate
displacement and cannot be used with external symbols; apparently the
linker fails to diagnose the overflow.
2016-12-16 22:39:19 -05:00
Bobby BinghamandRich Felker 3f79eaa870 fix use of incomplete struct type in s390x user.h 2016-12-16 22:36:22 -05:00
Bobby BinghamandRich Felker afefce19fd fix typo in s390x user.h 2016-12-16 22:34:36 -05:00
Bobby BinghamandRich Felker 1509494305 add s390x port 2016-11-11 23:06:21 -05:00
Bobby BinghamandRich Felker 54482898ab treat null vdso base same as missing
On s390x, the kernel provides AT_SYSINFO_EHDR, but sets it to zero, if the
program being run does not have a program interpreter.  This causes
problems when running the dynamic linker directly.
2016-11-11 12:58:27 -05:00
Bobby BinghamandRich Felker 5ab0b20ea6 remove obsolete gitignore rules
Since commit 2f853dd6b9, all generated
headers are generated under the obj directory, which is already ignored.
2016-07-06 00:21:25 -04:00
Bobby BinghamandRich Felker e1679ef1a1 remove or1k version of sem.h
It's identical to the generic version, after evaluating the endian
preprocessor checks in the generic version.
2016-07-06 00:21:19 -04:00
Bobby BinghamandRich Felker 3d98146146 pthread: implement try/timed join variants 2016-06-30 21:47:24 -04:00
Bobby Bingham 63e3a1661f deduplicate __NR_* and SYS_* syscall number definitions 2016-05-12 00:34:05 -05:00
Bobby Bingham 8ef6170b43 x32: eliminate __X32_SYSCALL_BIT constant 2016-05-12 00:32:45 -05:00
Bobby Bingham 622fe8b5cf x32: remove arch-specific syscall remapping
These system calls are already all remapped in an arch-agnostic manner in
src/internal/syscall.h
2016-05-12 00:30:51 -05:00
Bobby BinghamandRich Felker c0ede9e404 add powerpc64 port 2016-05-08 22:57:40 -04:00
Bobby BinghamandRich Felker 225f6a6b5b allow implementing a_cas_p with pointer-sized ll/sc
No current ports do this, but it will be useful for porting to 64-bit ll/sc
architectures, such as mips64 and powerpc64.
2016-02-23 13:04:08 -05:00
Bobby BinghamandRich Felker 53cd8c5a29 add missing memory barrier to pthread_join
POSIX requires pthread_join to synchronize memory on success.  The
futex wait inside __timedwait_cp cannot handle this because it's not
called in all cases.  Also, in the case of a spurious wake, tid can
become zero between the wake and when the joining thread checks it.
2015-10-15 22:58:59 -04:00
Bobby BinghamandRich Felker 390f93ef69 inline llsc atomics when building for sh4a
If we're building for sh4a, the compiler is already free to use
instructions only available on sh4a, so we can do the same and inline the
llsc atomics. If we're building for an older processor, we still do the
same runtime atomics selection as before.
2015-05-19 00:42:07 -04:00
Bobby BinghamandRich Felker f164875a84 don't shadow functions with macros in C++
C++ programmers typically expect something like "::function(x,y)" to work
and may be surprised to find that "(::function)(x,y)" is actually required
due to the headers declaring a macro version of some standard functions.

We already omit function-like macros for C++ in most cases where there is
a real function available. This commit extends this to the remaining
function-like macros which have a real function version.
2014-12-09 22:34:56 -05:00
Bobby Bingham 23d64182d8 fix superh nofpu check on old gcc versions
As far as gcc3 knows, sh4 is the only processor version that can have an
FPU, so it indicates the FPU's presence by defining __SH4__.  This is not
defined if there is no FPU, even if the processor really is an SH4.

Starting with gcc4, there is support for the sh2a processor, which has an
FPU but is not an SH4.  gcc4 therefore additionally defines __SH_FPU_ANY__
when there is an FPU, but still doesn't define __SH4__ for an FPU-less sh4.

Therefore, to support all gcc versions, we must look at both preprocessor
symbols.
2014-04-27 21:13:59 -05:00
Bobby Bingham 611eabd489 superh: fix dynamic linking of __fpscr_values
Applications ended up with copy relocations for this array, which
resulted in libc's references to this array pointing to the
application's copy.  The dynamic linker, however, can require this array
before the application is relocated, and therefore before the
application's copy of this array is initialized.  This resulted in
garbage being loaded into FPSCR before executing main, which violated
the ABI.

We fix this by putting the array in crt1 and making the libc copy
private.  This prevents libc's reference to the array from pointing to
an uninitialized copy in the application.
2014-03-16 16:17:28 -05:00
Bobby Bingham 3a3c813e08 superh port 2014-02-23 16:15:54 -06:00
Bobby Bingham fdf5f1b131 clone: make clone a wrapper around __clone
The architecture-specific assembly versions of clone did not set errno on
failure, which is inconsistent with glibc.  __clone still returns the error
via its return value, and clone is now a wrapper that sets errno as needed.
The public clone has also been moved to src/linux, as it's not directly
related to the pthreads API.

__clone is called by pthread_create, which does not report errors via
errno.  Though not strictly necessary, it's nice to avoid clobbering errno
here.
2014-02-09 20:07:43 -06:00