Age | Commit message (Collapse) | Author |
|
Move TLS initialization for static builds up to the calling
function as suggested by Daniel Fahlgren.
Reported-By: Daniel Fahlgren <daniel@fahlgren.se>
|
|
Information about Openrisc:
http://opencores.org/or1k/Main_Page
Integrated from:
https://github.com/openrisc/uClibc-or1k
|
|
Most changes are mechanical replacement of 'retw' instruction with
'abi_ret' macro, defined to 'retw' or 'ret' according to ABI.
Assembly code that makes calls is duplicated for call0 ABI with changed
register numbers for parameters/return value and call instruction.
'entry' instructions are replaced with 'abi_entry' macro.
More interesting changes:
- non-leaf assembly functions (e.g. _dl_tlsdesc_dynamic,
_dl_linux_resolve, SYSCALL_ERROR_HANDLER, PSEUDO) now need to preserve
registers around intermediate calls they make, use temporary stack
frame for that;
- setjmp/longjmp only need to save and restore return address, stack
pointer and callee-saved registers in the jmpbuf;
- __clone and syscall functions had hardcoded offsets to parameter
passed on stack, on call0 ABI they don't need stack frame, so the
offset is different. Replace these offsets with FRAMESIZE macro.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
|
|
posix_fallocate implementation in uClibc relies on fallocate
system call - it just returns what fallocate returns. However
fallocate returns -1 on failure and assigns an error number
to errno variable. In the same time posix_fallocate must
return an error number but not -1.
What does this patch: if fallocate returns -1 then posix_fallocate
returns errno. Otherwise posix_fallocate returns 0 on success.
However there is a side effect - posix_fallocate sets errno on
failure because fallocate does it. But POSIX does not forbid it
thus it's not a problem.
Signed-off-by: Yuriy Kolerov <yuriy.kolerov@synopsys.com>
|
|
For common generic syscall ABI fallocate syscall handler in kernel
expects a 64-bit signed arguments for offset and len. However uClibc
has 2 wrappers for this syscall: fallocate and fallocate64.
On 32-bit machines fallocate (not fallocate64) expects 32-bit values of
offset and len. Thus in this case uClibc's fallocate must pass to the
syscall those values with sign extension. High word of 64-bit value must
be 0 or 0xFFFFFFFF depending on sign of the original 32-bit value (offset
or len). It is how sign extansion works - all high bits of the negative
value must be 1.
So on 32-bit machines uClibc's fallocate does sign extension incorrectly
when 32-bit values are passed (offset or len). It just fills the second
word of 64-bit value by zeros. E.g. fallocate works incorrectly when offset
or length is negative value - in this case kernel thinks that positive
values are passed.
Solution is to call fallocate64 from fallocate and pass 32-bit values of
offset and len to fallocate64. off_t type is automatically converted to
off64_t with an appropriate sign extension. Then fallocate64 invokes
kernel's system call properly.
This error is detected in LTP's test kernel/syscalls/fallocate02:
----------->8----------
fallocate(..., 1, -1024, 1024) failed, expected errno:22: TEST_ERRNO=0
fallocate(..., 1, 1024, -1024) failed, expected errno:22: TEST_ERRNO=0
fallocate(..., 1, 12288, -1024) failed, expected errno:22: TEST_ERRNO=0
fallocate(..., 1, -24576, 1024) failed, expected errno:22: TEST_ERRNO=0
----------->8----------
fallocate does not emit an error because negative values are passed to the
kernel without sign extension and kernel thinks that it got valid positive
values.
Signed-off-by: Yuriy Kolerov <yuriy.kolerov@synopsys.com>
|
|
fallocate system call must return 0 on success. On error, -1 is returned
and errno is set to indicate the error.
However there is an error in fallocate which is fixed by this patch - it
does not set errno and returns invalid value on error (it returns error
code instead of -1).
This error is detected in LTP's test kernel/syscalls/fallocate02:
----------->8----------
fallocate(..., 1, 0, 1024) failed, expected errno:9: TEST_ERRNO=0
fallocate(..., 1, -1024, 1024) failed, expected errno:22: TEST_ERRNO=0
fallocate(..., 1, 1024, -1024) failed, expected errno:22: TEST_ERRNO=0
fallocate(..., 1, 12288, 0) failed, expected errno:22: TEST_ERRNO=0
fallocate(..., 1, 12288, -1024) failed, expected errno:22: TEST_ERRNO=0
fallocate(..., 1, -24576, 1024) failed, expected errno:22: TEST_ERRNO=0
----------->8----------
Signed-off-by: Yuriy Kolerov <yuriy.kolerov@synopsys.com>
|
|
Stack unwinding that happens during NPTL thread cancellation needs
cancellable syscall wrapper functions to be compiled with -fexceptions
-fasynchronous-unwind-tables to be able to unwind to cleanup handlers
registered before syscall invocation.
Add these flags for all cancellable syscall wrappers.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
|
|
This reverts commit d1671548b968103f4df1b80659e60ae1fc5a67b3.
You get following errors while compiling freeswitch:
awgn.c: In function 'awgn_init_dbov': awgn.c:110:5: error: void value not ignored as it ought to be s->rms = pow(10.0, level/20.0)*32768.0;
Reverting this commit allows to build the code.
|
|
Better use /tmp as embedded systems might have a read-only root.
Fix two wrong asserts.
|
|
When debugging a program on ARMv7 with thread-local storage declared using
"__thread", attempting to print a thread-local variable will result in the
following message:
Cannot find thread-local storage for Thread <snip> (LWP <snip>), executable
file /tmp/tls: capability not available
This can be traced back to uclibc libpthread/nptl_db/td_thr_tls_get_addr.c
which gdb uses to look up the address of the TLS. The function returns
TD_NOCAPAB due to a mismatch in size between the DTV pointer and the size
recorded in the db description. The problem lies in libpthread/nptl_db/db_info.c
which initializes the db with the sizeof the union dtv. Instead it should
be the sizeof a pointer to union dtv.
Fixed the initial size for dtvp to sizeof a pointer, instead of sizeof
the union.
Refer to:
http://sourceware.org/ml/libc-alpha/2006-10/msg00088.html
https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=416b630981788c1f08e746e19765aa0e5c2a1360
Signed-off-by: Junling Zheng <zhengjunling@huawei.com>
|
|
|
|
Signed-off-by: Romain Naour <romain.naour@openwide.fr>
|
|
Sync with glibc, quietens gcc warnings.
|
|
Simplify the switch from uClibc to uClibc-ng suggested
by Alexey Brodkin <Alexey.Brodkin@synopsys.com>.
Gcc always uses .0 ld.so link, so install it by default.
|
|
This reverts commit f52fb21a7af0aa4e983b3e6c2ddd1b6a526b5169.
Totally wrong patch.
|
|
Simplify the switch from uClibc to uClibc-ng suggested
by Alexey Brodkin <Alexey.Brodkin@synopsys.com>.
Gcc always uses .0 ld.so link, so install it by default.
|
|
|
|
See this discussion:
http://lists.busybox.net/pipermail/buildroot/2015-August/137229.html
Should help to fix compile issues with boost for ARC.
|
|
This fixes static compile issues of sudo, because sudo
uses it's own getenv implementation.
|
|
Change __gen_tempname() prototype in order to pass the additional
suffix lenght. In __gen_tempname() add a new check for suffixlen.
Update some comments in the code.
Signed-off-by: Romain Naour <romain.naour@openwide.fr>
Signed-off-by: Waldemar Brodkorb <wbx@uclibc-ng.org>
|
|
This fixes some build problems on f.e. Fedora hosts, when
locales are enabled.
Suggested via #buildroot on Freenode.
|
|
|
|
|
|
|
|
|
|
access to the jmp_buf structure occasionally happens asymmetrically:
fields defined in pointer size width (64 on N32) can be accessed as
32-bit words, but in that case, a̲l̲l̲ involved code must agree on that…
|
|
|
|
|
|
Found via buildroot autobuilder.
|
|
Existing version of memset() relies on existence of 64-bit load/stores.
While ARC HS38 may not have those instructions implemented in SoC.
Proposed implementation checks if "-mno-ll64" option was passed to gcc
(for ARCv2 "-mll64" is set implicitly by default) by checking __LL64__
definition and if it is not defined uses 32-bit load/stores.
Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Cc: Vineet Gupta <vgupta@synopsys.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TLS_LD should use linker-provided symbol _TLS_MODULE_BASE_ instead of
symbol it resolves to get thread pointer, otherwise linker relaxation
doesn't work correctly, adding extra offset to thread-local variable
address.
This fixes most of tls/tst-tls* tests.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
|
|
Native gdb makes a ptrace (GET_THREAD_AREA) which needs to return the
TP. however when libc sets up TP reg (for main thread), it doesn't call
arc_settls syscall so kernel doesn't know of TP register details
(moreso because clone doesnt have SETTLS flag)
Note that kernel doesn't know about r25 being TP etc.
This commit got lost in merge of NPTL tools into arc-mainline-dev and
showed up again as STAR 9000919529 (native gdb can't debug threaded
apps)
------->8---------------
[ARCLinux]# gdb ./pth
Reading symbols from ./pth...(no debugging symbols found)...done.
(gdb) b main
Breakpoint 1 at 0x106f2
(gdb) r
Starting program: /pth
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
thread_get_info_callback: cannot get thread info: generic error
(gdb) q
------->8---------------
Debugged-by: Anton Kolesov <akolesov@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
|
|
ret_ERRVAL is used by mq_timedsend and mq_timedreceive, it needs to be
defined to retw, otherwise error return from those functions segfaults.
This fixes the following testsuite failures:
.... tst-mqueue1
FAIL tst-mqueue1 got 1 expected 0
Didn't expect signal from child: got `Segmentation fault'
.... tst-mqueue2
FAIL tst-mqueue2 got 1 expected 0
Didn't expect signal from child: got `Segmentation fault'
.... tst-mqueue3
FAIL tst-mqueue3 got 1 expected 0
Didn't expect signal from child: got `Segmentation fault'
.... tst-mqueue4
FAIL tst-mqueue4 got 1 expected 0
Didn't expect signal from child: got `Segmentation fault'
.... tst-mqueue5
FAIL tst-mqueue5 got 1 expected 0
Didn't expect signal from child: got `Segmentation fault'
.... tst-mqueue6
FAIL tst-mqueue6 got 1 expected 0
Didn't expect signal from child: got `Segmentation fault'
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
|
|
Cancellable syscalls use call8 to call functions that enable/disable
cancellation, thus they cannot use the default FRAMESIZE.
Redefine FRAMESIZE for such syscalls.
This fixes the following testsuite failure:
.... tst-mqueue8
FAIL tst-mqueue8 got 1 expected 0
going to cancel mq_receive in-time
in-time mq_receive cancellation succeeded
going to cancel mq_receive early
Didn't expect signal from child: got `Segmentation fault'
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
|
|
Fixes segfaults when gcc 5.1 is used for x86.
http://git.uclibc.org/uClibc/commit/ldso/ldso/i386/dl-sysdep.h?h=ldso-future&id=7de778389d0040be4a21ffc326310e0eb361570a
Mentioned in #uclibc.
|
|
When built with gcc 5.1, uClibc-ng fails to build with the following
issue:
librt/librt_so.a(rt-unwind-resume.oS): In function `_Unwind_Resume':
rt-unwind-resume.c:(.text+0x3c): undefined reference to
This commit fixes the code in a way similar to what was done in glibc
in commit:
https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=175cef4163dd60f95106cfd5f593b8a4e09d02c9
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
|
|
|
|
|
into uClibc
|
|
Patch seen here:
http://lists.uclibc.org/pipermail/uclibc/2015-April/048892.html
|
|
|
|
|
|
7c721d31e4b7a0bdf6f803b8e7c38996bf60b59f
|
|
|