Age | Commit message (Collapse) | Author |
|
|
|
R_XTENSA_TLSDESC_ARG is a true RELA relocation, the addend is in the
relocation record itself, not in place.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
|
|
There are multiple errors in _dl_tlsdesc_dynamic:
- the reference C implementation should return pointer to the
thread-local variable, not offset from the thread pointer, because the
xtensa ABI expects TLSDESC_FN to return pointer to the TLS variable;
- addx8 used for indexing into dtv has its second and third registers in
wrong order, the index must be multiplied by 8, not the base;
- the same addx8 uses wrong base: instead of dtv it adds the offset to
the threadptr;
- the return value in the fast path is calculated as
td->tlsinfo.ti_offset - __builtin_thread_pointer, not what was
intended;
- both fast and slow paths should not subtract __builtin_thread_pointer
from the result.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
|
|
The fallback code is not used as all supported kernels have the
syscall. Check if a absolute path is returned from syscall.
|
|
Add NT_GNU_BUILD_ID and other defines to allow applications
using it to successfully compile. (f.e. firefox)
|
|
Loops with 'loop forever' annotation inside strcmp are actually meant to
loop forever. Falling through the end of the first loop may result in
equal strings being compared unequal, e.g.:
#include <string.h>
int main(void)
{
char a[4096] __attribute__((aligned(4)));
char b[4096] __attribute__((aligned(4)));
memset(a, ' ', 258 * 8);
memset(b, ' ', 258 * 8);
a[255 * 8] = 0;
a[256 * 8] = 'a';
b[255 * 8] = 0;
b[256 * 8] = 'b';
return !(strcmp(a, b) == 0);
}
Falling through the end of the second loop may result in unequal strings
being compared as equal, e.g.:
#include <string.h>
int main(void)
{
char a[4096] __attribute__((aligned(4)));
char b[4096] __attribute__((aligned(4)));
memset(a, ' ', 514 * 6);
memset(b, ' ', 514 * 6);
a[514 * 6 + 0] = 'a';
a[514 * 6 + 1] = 0;
b[514 * 6 + 0] = 'b';
b[514 * 6 + 1] = 0;
return !(strcmp(a, b) != 0);
}
Use 0 as a loop counter to make 2^32 - 1 iterations which is enough to
cover all addressable memory. While at it drop useless nop at the end of
the first loop and use a11 for all loop counters.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
|
|
In libc/sysdeps/linux/common/bits/uClibc_pthread.h:
extern void weak_function _pthread_cleanup_push_defer(...)
This *weak_function* declaration will cause nptl/cleanup_defer_compat.c:
strong_alias (...) !!!FAIL!!!, because it include pthreadP.h->pthread.h
->uClibc_pthread.h
That means:
Readelf -s libpthread/nptl/cleanup_defer_compat.o you will get:
18: 00000000 198 FUNC WEAK DEFAULT 1 _pthread_cleanup_push_def
Readelf -s libc/misc/internals/__uClibc_main.o you will also get:
32: 00000038 58 FUNC WEAK DEFAULT 1 _pthread_cleanup_push_def
Final: gcc malloc_pthread_test.c -lpthread
The libc/stdlib/malloc-standard/malloc.c:839 (__MALLOC_LOCK->
_pthread_cleanup_push_def) will use the one in __uClibc_main.o
!!!not in cleanup_defer_compat.o!!!, becasue two cleanup_defer_compat in
libc.a with the same weak declarations and the __uClibc_main.o is close
to front.
====
All of malloc/free will failed in muti-threads' race conditions
probabilistic.
As it happens, uClibc-0.9.33.2 is OK, Becasue:
It's seperated in libpthread.a and libc.a, and the libc.a is the
last lib for ld internal-cmd, and malloc will get right cleanup_defer_compat
from libpthread.a.
This BUG is from 2016-09-24 to now:
>>>
commit 29ff9055c80efe77a7130767a9fcb3ab8c67e8ce
Author: Waldemar Brodkorb <wbx@uclibc-ng.org>
Date: Sat Sep 24 02:55:31 2016 +0200
use a single libc and deduplicate threading code
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
<<<
Perharps we need carefully check all of the impact about that commit.
Signed-off-by: Guo Ren <ren_guo@c-sky.com>
|
|
It seems there is no real dependency to NPTL for these clock_*
functions when UCLIBC_ADVANCED_REALTIME is enabled.
No regressions found.
Reported-by: Baruch Siach <baruch@tkos.co.il>
|
|
Only mips/x86/x86_64 needs a special version of lowlevellock.h.
No regressions found.
|
|
This is to fix an error after switching to use generic syscalls.
libc/sysdeps/linux/common/syscall.c: In function 'syscall':
libc/sysdeps/linux/common/syscall.c:27:2: warning: implicit
declaration of function 'internal_syscall_ncs6'
[-Wimplicit-function-declaration]
return INLINE_SYSCALL_NCS(sysnum, 6, arg1, arg2, arg3, arg4, arg5,
arg6);
^
Defining these functions as described by Vincent Ren-Wei Chen
<vincentc@andestech.com>
Signed-off-by: Stafford Horne <shorne@gmail.com>
|
|
Traditionally nds32 has had a generic syscall implementation supporting
varargs.
During an audit it was found that this implementation seems to duplicate
the new common implementation and is no longer needed.
Signed-off-by: Stafford Horne <shorne@gmail.com>
|
|
Now that the common syscall implementation supports vararg calling
conventions we can safely use it on OpenRISC.
This saves a bit of code in the openrisc implementation.
Signed-off-by: Stafford Horne <shorne@gmail.com>
|
|
The definition of syscall() in unistd.h is with varargs. Traditionally
the common implementation in uclibc has been with regular arguments.
This patch updates that by using varargs.
This has caused issues on architectures like or1k which have different
calling conventions for varargs and regular arg parameters.
The implementation here is based on an implementation from Joel Stanley
<joel@jms.id.au>. There is a difference that I do not initialize the
stack args with 0 as they are immediately overwritten by va_args.
Signed-off-by: Stafford Horne <shorne@gmail.com>
|
|
Use __NR_sync_file_range2 for csky sync_file_range function.
Signed-off-by: Guo Ren <ren_guo@c-sky.com>
|
|
Sync with GNU C library commit:
commit a68ba2f3cd3cbe32c1f31e13c20ed13487727b32
Author: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date: Wed Oct 18 17:26:23 2017 +0100
Fixes issues with binutils version > 2.29.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.
|
|
|
|
|
|
Port over NPTL/TLS support from GNU C Library.
In the first step only the slower syscall is used for TLS
access. The uClibc-ng testsuite shows 79 errors, so their
is room for bugfixes and improvements.
|
|
Signed-off-by: Guo Ren <ren_guo@c-sky.com>
|
|
|
|
Pass the -mcpu and -mhard-float from UCLIBC_EXTRA_CFLAGS instead.
Signed-off-by: Guo Ren <ren_guo@c-sky.com>
|
|
|
|
Busybox internally calls syscall(2).
- in unistd.h defined something like
int syscall(nr, ....)
- in syscall.c (common) implemented as
int syscall(nr, arg1, arg3, arg3, arg4, arg5, arg6)
This will not work, busybox thinks syscall should have varargs calling
conventions. But it doesnt in the uclibc implementation so no args go through.
Most architectures this will work. But on openrisc varargs are all sent on the
stack. Regular args are passed in registers.
Commit message and idea from Stafford Horne <shorne@gmail.com>.
Signed-off-by: Joel Stanley <joel@jms.id.au>
|
|
|
|
|
|
|
|
|
|
Commit ea38f4d89 (math: add exception handling functionality) adds a
regression so that build configurations that have DO_C99_MATH enabled
and DO_XSI_MATH disabled will not link. This commit moves the files with
the bessel functions from DO_C99_MATH to DO_XSI_MATH. It looks like they
are not even contained in C99.
Signed-off-by: Ronald Wahl <ronald.wahl@raritan.com>
|
|
|
|
Add missing member in struct statfs.
It is used by xfsprogs (f.e. 4.13.1).
Reported-by: Joshua Kinard <kumba@gentoo.org>
|
|
From or1k-glibc from blueCmd, his commit "Fix TLS, removed too much in
rebase".
Signed-off-by: Stafford Horne <shorne@gmail.com>
|
|
Previously we saved everything, but we only need to save the registers
that are promised to be untouched by the setjmp call.
|
|
|
|
|
|
Follow-up of e3d6c8bffe79b2c070bc7a3aabc9d9c65f6b099e
Signed-off-by: Eugene Rudoy <gene.devel@gmail.com>
Signed-off-by: Ralf Friedl <Ralf.Friedl@online.de>
|
|
|
|
Signed-off-by: Guo Ren <ren_guo@c-sky.com>
|
|
It is supported both in the sense of being contained in mips version
of statfs/statfs64 structs and also in the sense that it's filled by
the corresponding kernel syscalls.
It is UNsupported in that sense that it's value is the same as that
of f_bsize (at least on older kernel versions, the oldest version
tested is 2.6.13), s. [1] and [2] for details ([1] is the latest
kernel version as of now, [2] is the oldest kernel version git
history is available for).
[1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/tree/fs/statfs.c?h=v4.14-rc7#n64
[2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/tree/fs/open.c?h=v2.6.12-rc2#n41
Follow-up of 68de9946e914d8c30dcc6667a059ea59e5b74cac
Signed-off-by: Eugene Rudoy <gene.devel@gmail.com>
Signed-off-by: Ralf Friedl <Ralf.Friedl@online.de>
|
|
Fix iteration over signals, synced with GNU C library code and
pending patches. Issues found when running dhcpcd with hook
scripts. (exit status 127)
Reported-By: kapeka <kapeka@bering-uclibc.de>
|
|
Follow the steps to build c-sky uclibc linux system:
1. git clone https://github.com/c-sky/buildroot.git
2. cd buildroot
3. make qemu_csky_ck810_uclibc_defconfig
4. make
Follow the buildroot/board/qemu/csky/readme.txt to run.
This buildroot toolchain is pre-build, But you can rebuild
the c-sky uclibc-ng alone and install it to the buildroot
sysroot manually.
We'll try our best to improve the uclibc-ng continuously.
Signed-off-by: Guo Ren <ren_guo@c-sky.com>
|
|
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.
|
|
|
|
Signed-off-by: Stafford Horne <shorne@gmail.com>
|
|
Signed-off-by: Stafford Horne <shorne@gmail.com>
|
|
|
|
According to standards SVID and SYSV.
Modified lgamma calling in case when 'signgam' variable should not be used.
Signed-off-by: Waldemar Brodkorb <wbx@uclibc-ng.org>
|
|
After discussion on the busybox mailinglist.
Reported-by: Ralf Friedl <Ralf.Friedl@online.de>
Signed-off-by: Waldemar Brodkorb <wbx@uclibc-ng.org>
|
|
After discussions on the busybox mailinglist.
Reported-by: Ralf Friedl <Ralf.Friedl@online.de>
Signed-off-by: Waldemar Brodkorb <wbx@uclibc-ng.org>
|
|
Signed-off-by: Alex Potapenko <opotapenko@gmail.com>
Signed-off-by: Waldemar Brodkorb <wbx@uclibc-ng.org>
|