aboutsummaryrefslogtreecommitdiff
path: root/libpthread/linuxthreads
AgeCommit message (Collapse)AuthorFilesLines
2024-05-21linuxthreads: enable unwinding over signal framesMax Filippov1-0/+2
linuxthreads use a helper function to invoke signal handlers, this function needs stack unwinding information to enable stack unwinding from signal handlers over signal frames. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
2024-05-18Fix riscv32 build with gcc-14.Dmitry Chestnykh1-0/+2
Add missing includes and function decls. Signed-off-by: Dmitry Chestnykh <dm.chestnykh@gmail.com>
2024-03-29riscv32: implement linuxthreads, from sorearWaldemar Brodkorb1-0/+61
2024-03-28riscv64: implement Linuxthreads, from sorearWaldemar Brodkorb2-1/+62
2024-03-07libpthread/linuxthreads: add missing string.h include in condvar.cMarcus Haehnel1-0/+1
Quelches a compiler warning by that memset was implicitly declared.
2024-03-07libpthread: Remove no longer valid attribute_unusedMarcus Haehnel1-1/+1
The variable is used since 04a676f3c8d2443499f27612f69ee88e12089e61.
2024-02-22Introduce time64 support.Dmitry Chestnykh1-0/+4
This patch introduces *time64 syscalls support for uClibc-ng. Currently the redirection of syscalls to their *time64 analogs is fully supported for 32bit ARM (ARMv5, ARMv6, ARMv7). The main changes that take effect when time64 feature is enabled are: - sizeof(time_t) is 8. - There is a possibility os setting date beyond year 2038. - some syscalls are redirected: clock_adjtime -> clock_adjtime64 clock_getres -> clock_getres_time64 clock_gettime -> clock_gettime64 clock_nanosleep -> clock_nanosleep_time64 clock_settime -> clock_settime64 futex -> futex_time64 mq_timedreceive -> mq_timedreceive_time64 mq_timedsend -> mq_timedsend_time64 ppoll -> ppoll_time64 pselect6 -> pselect6_time64 recvmmsg -> recvmmsg_time64 rt_sigtimedwait -> rt_sigtimedwait_time64 sched_rr_get_interval -> sched_rr_get_interval_time64 semtimedop -> semtimedop_time64 timer_gettime -> timer_gettime64 timer_settime -> timer_settime64 timerfd_gettime -> timerfd_gettime64 timerfd_settime -> timerfd_settime64 utimensat -> utimensat_time64. - settimeofday uses clock_settime (like in glibc/musl). - gettimeofday uses clock_gettime (like in glibc/musl). - nanosleep uses clock_nanosleep (like in glibc/musl). - There are some fixes in data structures used by libc and kernel for correct data handling both with and without enabled time64 support. Signed-off-by: Dmitry Chestnykh <dm.chestnykh@gmail.com>
2023-11-27linuxthreads: Avoid unused variable warningMarcus Haehnel1-8/+2
The spurious_wakeup_count variable is set but is never actually used for the semaphore implementation. To avoid a clang warning for this case remove the unused variable.
2023-08-03linuxthreads/signal: improve sigaction behaviorMax Filippov1-6/+11
Setting signal handler in the kernel and then updating sighandler[sig] results in a crash if a signal which handler is being changed from SIG_DFL to a non-default was pending. Improve the race a little and update the sighandler[sig] before the sigaction syscall. It doesn't eliminate the race entirely, but fixes this particular failing case. E.g. this fixes the 100% reproducible segfault in the busybox hush shell built with FEATURE_EDITING_WINCH on ssh client's terminal window resize, but in that case there's one more even bigger issue: busybox calls sigaction with both old and new signal pointers pointing to the same structure instance, as a result act->sa_handler after the sigaction syscall is not what the user requested, but the previous handler. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
2023-01-22Fix for CVE-2022-29503.linted1-5/+30
Changed linux thread's stack allocation mmap to use new MAP_FIXED_NOREPLACE flag on kernels >4.17. For older kernels, a check is added to see if requested address matches the address received. If the addresses don't match, an error is returned and thread creation is aborted. Signed-off-by: linted <linted@users.noreply.github.com>
2022-07-20linuxthread/arm: Unlock ldrex/strex varsion of testandset for __ARM_ARCH >= 7Vladimir Murzin1-1/+1
Thomas has repored failure building ARM 32-bit systems for ARMv8 cores CC libpthread/linuxthreads/mutex.os /tmp/ccn8SFKU.s: Assembler messages: /tmp/ccn8SFKU.s:162: Error: swp{b} use is obsoleted for ARMv8 and later /tmp/ccn8SFKU.s:186: Error: swp{b} use is obsoleted for ARMv8 and later /tmp/ccn8SFKU.s:203: Error: swp{b} use is obsoleted for ARMv8 and later /tmp/ccn8SFKU.s:224: Error: swp{b} use is obsoleted for ARMv8 and later make[1]: *** [Makerules:369: libpthread/linuxthreads/mutex.os] Error 1 This is due to libpthread/linuxthreads/sysdeps/arm/pt-machine.h which uses the swp instruction that is not allowed on ARMv8. All __ARM_ARCH >= 7 support ldrex/strex instructions, so unlock testandset() varaint for them. Reported-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
2022-07-20linuxthreads/arm: fix ldrex/strex loop when built with O0Vladimir Murzin1-25/+9
O0 build result in the following codegen 00000000 <ldrex>: 0: b480 push {r7} 2: b085 sub sp, #20 4: af00 add r7, sp, #0 6: 6078 str r0, [r7, #4] 8: 687b ldr r3, [r7, #4] a: e853 3f00 ldrex r3, [r3] e: 60fb str r3, [r7, #12] 10: 68fb ldr r3, [r7, #12] 12: 4618 mov r0, r3 14: 3714 adds r7, #20 16: 46bd mov sp, r7 18: f85d 7b04 ldr.w r7, [sp], #4 1c: 4770 bx lr 0000001e <strex>: 1e: b480 push {r7} 20: b085 sub sp, #20 22: af00 add r7, sp, #0 24: 6078 str r0, [r7, #4] 26: 6039 str r1, [r7, #0] 28: 687b ldr r3, [r7, #4] 2a: 683a ldr r2, [r7, #0] 2c: e842 3300 strex r3, r3, [r2] 30: 60fb str r3, [r7, #12] 32: 68fb ldr r3, [r7, #12] 34: 4618 mov r0, r3 36: 3714 adds r7, #20 38: 46bd mov sp, r7 3a: f85d 7b04 ldr.w r7, [sp], #4 3e: 4770 bx lr 00000040 <testandset>: 40: b590 push {r4, r7, lr} 42: b083 sub sp, #12 44: af00 add r7, sp, #0 46: 6078 str r0, [r7, #4] 48: 6878 ldr r0, [r7, #4] 4a: f7ff fffe bl 0 <ldrex> 4e: 4603 mov r3, r0 50: 461c mov r4, r3 52: 6879 ldr r1, [r7, #4] 54: 2001 movs r0, #1 56: f7ff fffe bl 1e <strex> 5a: 4603 mov r3, r0 5c: 2b00 cmp r3, #0 5e: d1f3 bne.n 48 <testandset+0x8> 60: 4623 mov r3, r4 62: 4618 mov r0, r3 64: 370c adds r7, #12 66: 46bd mov sp, r7 68: bd90 pop {r4, r7, pc} ARM ARM suggests that LoadExcl/StoreExcl loops are guaranteed to make forward progress only if, for any LoadExcl/StoreExcl loop within a single thread of execution, the software meets all of the following conditions: 1 Between the Load-Exclusive and the Store-Exclusive, there are no explicit memory accesses, preloads, direct or indirect System register writes, address translation instructions, cache or TLB maintenance instructions, exception generating instructions, exception returns, or indirect branches. ... Obviously condition is not met for O0 builds. O2 build (which is highly likely the most common setting) able to do the right thing resulting in 00000000 <ldrex>: 0: e850 0f00 ldrex r0, [r0] 4: 4770 bx lr 6: bf00 nop 00000008 <strex>: 8: e841 0000 strex r0, r0, [r1] c: 4770 bx lr e: bf00 nop 00000010 <testandset>: 10: 2101 movs r1, #1 12: 4603 mov r3, r0 14: e853 0f00 ldrex r0, [r3] 18: e843 1200 strex r2, r1, [r3] 1c: 2a00 cmp r2, #0 1e: d1f9 bne.n 14 <testandset+0x4> 20: 4770 bx lr 22: bf00 nop Rather than depending on level of optimisation implement whole ldrex/strex loop in inline assembly. Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
2020-08-11xtensa: add exclusive access supportMax Filippov1-0/+56
Add XCHAL definitions for S32C1I and EXCLUSIVE options to xtensa-config.h, include it in places that implement atomic operations and add implementations with exclusive access option opcodes. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
2020-08-11xtensa: relax memory constraint in atomic assemblyMax Filippov1-8/+7
Replace "a" constraints with "+m" to avoid forcing atomic variable address into a register and let the compiler use non-zero offset in load/store opcodes. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
2018-04-22linuxthreads: implement pthread_condattr_{s,g}etclock()Waldemar Brodkorb4-3/+85
More applications are using pthread_condattr_setclock()/ pthread_condattr_getclock() in their code. Port these two functions from NPTL over to be more compatible.
2018-01-03fdpic: fix ld.so crashingWaldemar Brodkorb1-1/+1
Newer binutils is creating a section INIT_ARRAY from any .init_array and .ctors in the code. When ld.so runs initialization functions for loaded objects with _dl_run_init_array() it crashes on Bfin FDPIC system. It is trying to execute the function in pthread.c, which is no longer useful with the combined C library approach. Gcc -Wl,-M debugging output was very useful to find the reason for the INIT_ARRAY section.
2017-11-19linuxthreads: add dummy for pthread_atforkWaldemar Brodkorb1-0/+12
For noMMU targets we need a pthread_atfork dummy, otherwise libraries like libressl using pthread_atfork, but not fork() for itself, can not be used. But software like curl with ssl support linking against libressl still work fine on noMMU targets.
2017-11-02convert accept4() to use cancel.h macrosWaldemar Brodkorb1-0/+7
2017-06-11remove outdated manpages and README's for ld.so/linuxthreadsWaldemar Brodkorb1-1627/+0
2017-04-16or1k: silence gcc warningsWaldemar Brodkorb1-2/+1
Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
2017-03-20remove RPC implementationWaldemar Brodkorb2-40/+0
The included RPC implementation is ipv4 only. Other C library projects have either deprecated the internal RPC implementation (GNU C Library) or never implemented such functionality (musl C Library). The latest rpcbind release (0.2.4) checks for libtirpc and does not allow to be build with uClibc-ng RPC without patching. The common use case for RPC nowadays is to use rpcbind together with nfs-utils to provide NFS server or client support to a system. The included RPC implementation does create issues with duplicate symbol failures when statically compiling with RPC enabled.
2017-01-22nds32: add NPTL/TLS, *context function, libm changes and code cleanupVincent Ren-Wei Chen2-2/+2
This commit includes following features. 1. Support NPTL/TLS 2. Add libm function which is used to handle FP rounding and excpetions (ex: fclrexcpt,fedisblxcpti,feenablxcpt... ) 3. Add *context function for operating user context (ex: setcontext,getcontext,makecontext... ) 4. Change the return flow from signal handler 5. Cleanup of old code The testsuite only has 2 errors, tst-cpuclock1 and tst-cputimer1, which are related to timing accuracy. (math and locale tests are disabled) Signed-off-by: Vincent Ren-Wei Chen <vincentc@andestech.com>
2016-11-30NONTLS_INIT_TP is never defined, remove dead codeWaldemar Brodkorb1-20/+0
2016-11-27remove UCLIBC_HAS_LFSWaldemar Brodkorb1-8/+3
2016-11-17libpthread: remove pthread_atfork for noMMU targetRomain Naour2-14/+2
There is not possible to use use fork() on noMMU target, so exporting pthread_atfork() for such target is useless. A program using pthread_atfork() will likely fail at runtime due to the error code returned by this function. Signed-off-by: Romain Naour <romain.naour@gmail.com>
2016-10-24linuxthreads: add back signal.hWaldemar Brodkorb1-0/+1
Somehow this got removed with f1d7505e40654a185843bdc8f1cf1fd00ab55c04. Reported-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-09-26use a single libc and deduplicate threading codeWaldemar Brodkorb8-504/+6
Similar to musl libc a single libc has many benefits and solves some open issues with uClibc-ng. - no pthread_mutex_* weak symbols exported anymore - applications no longer failing to link when either -lrt or -lpthread are missing for dynamic and static linking mode - smaller C library - slightly better runtime performance
2016-09-26linuxthreads: use tkill syscall for raiseWaldemar Brodkorb1-9/+9
Seems better and more stable.
2016-09-19linuxthreads: Fix up pthread.h for XPG7.Leonid Lisovskiy1-6/+2
[ glibc commit d3c7e68655 ] Signed-off-by: Leonid Lisovskiy <lly.dev@gmail.com>
2016-08-16linuxthreads: install libpthread_nonshared.aWaldemar Brodkorb1-1/+4
This is useful to build native gcc on targets supporting Linuxthreads instead of NPTL.
2016-06-30nds32: add support for new architectureWaldemar Brodkorb2-0/+168
Add support for Andes Technology NDS32 architecture. See here http://www.andestech.com/en/index/index.htm for more informaton. Verification of the port from an older uClibc port was done on a sponsored AG101p board. The testsuite only has 5 errors, three are related to an existing bug in dlclose() with LT.old, also happening on cris32 and m68k. Failures to fallocate/posix_fallocate are unresolved. Thanks to Andes Technology sponsoring the hardware and being very helpful while doing the uClibc-ng porting. Signed-off-by: Waldemar Brodkorb <wbx@uclibc-ng.org>
2016-06-23libs: install backward compatibility symlinksAlexey Brodkin1-0/+2
Simplify the switch from uClibc to uClibc-ng. Apps already built against uClibc-0.9.x.y require .so.0 libs to present on target which in case of current uClibc-ng is not the case and those apps could not be run. This change creates symlinks from .so.1 to .so.0 for most of other libs in the same way as it was done by 23e96d89b6ab "ldso: install backward compatibility symlink by default" Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> Cc: Waldemar Brodkorb <wbx@uclibc-ng.org> Cc: Vineet Gupta <vgupta@synopsys.com> Cc: Anton Kolesov <akolesov@synopsys.com>
2016-05-31linuxthreads.old: Fix segfault when pthread_mutex_unlock() called against ↵Leonid Lisovskiy1-3/+9
unlocked NORMAL mutex. Althought, it is undefined behavior, there is no reason for segfault. Program received signal SIGSEGV, Segmentation fault. __pthread_unlock (lock=lock@entry=0x804b03c <lock+16>) at libpthread/linuxthreads.old/spinlock.c:231 231 (&lock->__status, oldstatus, (long)(thr->p_nextlock) & ~1L)) It occurs only on platforms which has HAS_COMPARE_AND_SWAP defined. Restore glibc commit fbaf6e72d6 "spinlock.c (__pthread_unlock): Don't crash if called for an untaken mutex." behavior, broken later by commit 4ad1d0cfbf. Signed-off-by: Leonid Lisovskiy <lly.dev@gmail.com>
2016-05-28linuxthreads: Fix warnings in pthread_tryjoin_np(), pthread_timedjoin_np()Leonid Lisovskiy1-2/+2
Accidentally, commit 43ef9c6b3 wasn't taken into account. Signed-off-by: Leonid Lisovskiy <lly.dev@gmail.com>
2016-05-24microblaze: fix linuxthreads supportWaldemar Brodkorb1-56/+30
Got the working code from https://github.com/jdkoftinoff/mb-linux-msli/, otherwise SIGILL while using linuxthreads.
2016-05-18remove linuxthreads.new, rename linuxthreads.oldWaldemar Brodkorb186-13472/+5040
Linuxthreads.new isn't really useful with the existence of NPTL/TLS for well supported architectures. There is no reason to use LT.new for ARM/MIPS or other architectures supporting NPTL/TLS. It is not available for noMMU architectures like Blackfin or FR-V. To simplify the live of the few uClibc-ng developers, LT.new is removed and LT.old is renamed to LT. LINUXTHREADS_OLD -> UCLIBC_HAS_LINUXTHREADS
2016-04-15replace FSF addresses with URLsNikola Forró1-2/+1
License notices in most of the source files refer to an outdated FSF address. Replace it with URL, like in the rest of the source files.Signed-off-by: Nikola Forró <nforro@redhat.com>
2015-12-05remove __UCLIBC_ASM_GLOBAL_DIRECTIVE__Waldemar Brodkorb1-1/+1
.globl can be used for every architecture so remove the define. Sync with GNU C library.
2015-10-09add new architecture support for or1kWaldemar Brodkorb1-0/+55
Information about Openrisc: http://opencores.org/or1k/Main_Page Integrated from: https://github.com/openrisc/uClibc-or1k
2015-04-12remove more of the link_warningsWaldemar Brodkorb1-5/+0
Only the stub warnings left for now.
2015-03-29merge uClibc git masterWaldemar Brodkorb2-20/+20
2015-03-13unistd.h: put getppid under XOPEN2K8Bernhard Reutner-Fischer2-20/+20
Add __LEAF to all __THROW, introduce non-leaf __THROWNL Adjust affected spots accordingly. Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
2015-02-14Revert "resolve merge"Waldemar Brodkorb191-5081/+13571
This reverts commit 6b6ede3d15f04fe825cfa9f697507457e3640344.
2015-02-14resolve mergeWaldemar Brodkorb191-13571/+5081
2014-10-03linuxthreads: fix compile error for non-MMUWaldemar Brodkorb1-1/+1
Otherwise you get following linking error, because of missing functions in libc.a: undefined reference to `__libc_enable_asynccancel' Fix by Thorsten Glaser while hacking session.
2014-10-03m68k: fix linuxthreads compile for coldfireWaldemar Brodkorb3-7/+26
The tas instruction is not available for most coldfire CPU's. Use bset instead in this case as already used in linuxthreads.old.
2014-09-20linuxthreads: remove unused s390 codeWaldemar Brodkorb13-1214/+0
Cleanup linuxthreads by removing unused s390 code. Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
2014-09-16buildsys: fix IS_IN_lib*Bernhard Reutner-Fischer1-5/+1
define NOT_IN_libc / IS_IN_libxxx appropriately to fix pthread_once Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
2014-09-04sparc: remove sparc64/sparcv9 codeWaldemar Brodkorb13-744/+260
The sparc64/sparcv9 code is incomplete. Furthermore there is no real embedded hardware for sparc64 available, so better remove it until someone comes up with a complete port. Signed-off-by: Waldemar Brodkorb <wbx@openadk.org> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
2013-03-13LT{,.old}: include stddef.h for size_tVineet Gupta1-0/+3
A user application built with -D_POSIX_C_SOURCE=200112L and #include signal.h, yields following compilation error: ------------------->8----------------------------- arc-linux-uclibc-gcc -D_POSIX_C_SOURCE=200112L hello.c In file included from /opt/INSTALL/lib/gcc/arc-linux-uclibc/4.4.7/../../../../arc-linux-uclibc/sys-include/signal.h:429, from hello.c:1: /opt/INSTALL/lib/gcc/arc-linux-uclibc/4.4.7/../../../../arc-linux-uclibc/sys-include/bits/pthreadtypes.h:48: error: expected specifier-qualifier-list before 'size_t' ------------------->8----------------------------- The fix is to make sure size_t is explicitly provided to pthreadtype.h Signed-off-by: Vineet Gupta <vgupta@synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>