Age | Commit message (Collapse) | Author |
|
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Mike Frysinger <vapier@gentoo.org>
Cc: Denys Vlasenko <vda.linux@googlemail.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Patch "LT.old: Make __errno_location/__h_errno_location thread safe"
uncovered yet another bug with static linking and errno (hopefully this
is last of them all).
Currently, __errno_location is declared weak but is defined strong.
While this provides with the desired weak semantics in dso, it
is subtly broken in static links.
Quoting Joern Rennecke (ARC gcc expert):
| I think the issue is that you declare the function as weak in the
| header file. That is a rare instance where you want the reference
| use declaration that differs a bit from the definition.
| If the reference uses a weakly declared function, that creates a
| weakref, i.e. the linker won't bother to look for this symbol at
| all - if it gets linked in for some other reason, fine,
| otherwise, it stays zero.
So the solution to declare strong, define weak.
Supporting data
-----------------
orig code: ARM mmap wrapper (LT.old build + my prev patch for errno)
_mmap:
@ args = 8, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
stmfd sp!, {r4, r5, r7, lr}
ldr r5, [sp, #20]
movs ip, r5, asl #20
beq .L2
bl __errno_location(PLT)
mov r3, #22
str r3, [r0, #0]
mvn r0, #0
...
...
.weak __errno_location
A statically linked hello world program which uses mmap too.
As we can see__errno_location is completely gone - which is
semantically wrong - we need functional errno.
00008274 <__GI_mmap>:
8274: e92d40b0 push {r4, r5, r7, lr}
8278: e59d5014 ldr r5, [sp, #20]
827c: e1b0ca05 lsls ip, r5, #20
8280: 0a000004 beq 8298
8284: e320f000 nop {0}
^^^^^^^^^^
8288: e3a03016 mov r3, #22
828c: e5803000 str r3, [r0]
8290: e3e00000 mvn r0, #0
This in turn is due to a fixup in ARM ld which transforms branch-to-null
into a nop. It is better than crashing but still wrong since errno
handling is removed.
With the patch, errno_location is restored back in test program.
00008274 <__GI_mmap>:
8274: e92d40b0 push {r4, r5, r7, lr}
8278: e59d5014 ldr r5, [sp, #20]
827c: e1b0ca05 lsls ip, r5, #20
8280: 0a000004 beq 8298 <__GI_mmap+0x24>
8284: eb000010 bl 82cc <__errno_location>
8288: e3a03016 mov r3, #22
828c: e5803000 str r3, [r0]
Cc: Christian Ruppert <christian.ruppert@abilis.com>
CC: Francois Bedard <Francois.Bedard@synopsys.com>
Cc: Anton Kolesov <Anton.Kolesov@synopsys.com>
Cc: Joern Rennecke <joern.rennecke@embecosm.com>
Cc: Jeremy Bennett <jeremy.bennett@embecosm.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Peter Korsgaard <peter@korsgaard.com>
Cc: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
WHY: errno in uClibc is not thread safe
HOW: __errno_location and it's sibling __h_errno_location need to be called
via PLT - even from within libc. That way when linked with pthread,
intra-uClibc callers will also use the thread safe version.
This is achieved by removing the GI alias for these functions,
ensuring that they get called normally (via PLT)
Verified with ARC LT.old and ARM cubieboard2 buildroot (LT.old)
NPTL is unaffected by this bug.
------------ History behind this patch ---------------------
This is a long standing bug (https://bugs.busybox.net/show_bug.cgi?id=2089)
Others have tried to fix it in past (alteast Peter Korsgaard's patch in 2010),
but somehow failed to be merged (or were backed out afterwards).
http://lists.uclibc.org/pipermail/uclibc/2010-July/044176.html
One of the causes could be side effect of atleast one more bug related to
pthreads and static link which has now been fixed.
http://lists.uclibc.org/pipermail/uclibc/2013-October/047958.html
I have solved this w/o looking at other pacthes but would like to give
credit to Peter and others for confirming that it makes sense.
Cc: Christian Ruppert <christian.ruppert@abilis.com>
CC: Francois Bedard <Francois.Bedard@synopsys.com>
Cc: Joern Rennecke <joern.rennecke@embecosm.com>
Cc: Jeremy Bennett <jeremy.bennett@embecosm.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Peter Korsgaard <peter@korsgaard.com>
Cc: Khem Raj <raj.khem@gmail.com>
Cc: buildroot@busybox.net
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
A simple statically linked hello world program was segfaulting for ARC
in linuxthreads.old configuration (although the root casue applies
cross-arch for NPTL as well as linuxthreads.old as described)
The crash was due to branch to NULL in _stdio_init
0001026c <_stdio_init>:
1026c: push_s blink
1026e: st.a r13,[sp,-8]
10272: bl.d 0 --> supposed call to __errno_location
The call was NOT getting patched to libc internal only alias
__GI___errno_location, because it was weak while it's exported cousin,
__errno_location was strong/normal.
arc-linux-uclibc-nm libc/misc/internals/__errno_location.os
00000000 W __GI___errno_location
00000000 T __errno_location
This is exactly opposite to what is expected.
Quoting Peter S. Mazinger, commit 87936cd013041 "errno and *_init cleanup"
| The rule adopted:
| for enabled threads we make in libc the __GI_x() variants strong, x() weak
| and (should) provide another strong x() in libpthread.
| If threads are disabled, even the __GI_x() variants are weak.
With the fix, we see the right settings as below
00000000 T __GI___errno_location
00000000 W __errno_location
Note that problem won't show up in a static busybox build as it references
errno and that seems to elide the issue.
I can confirm the same/more issues with latest ARM buildroot builds w/o
my fix.
(1). linuxthreads.old (broken just like ARC)
arm-linux-nm uclibc-snapshot/libc/misc/internals/__errno_location.os
00000000 W __GI___errno_location
00000000 T __errno_location
But presumably the issue there is NOT catestrophic because ARM linker is
likely smarter and patches a NOP instead of NULL branch.
00008388 <_stdio_init>:
8388: e92d4038 push {r3, r4, r5, lr}
838c: e320f000 nop {0}
(2) NPTL build (exported version is not weak)
00000000 T __GI___errno_location
00000000 T __errno_location
This causes a static link with libpthread and test program
referencing errno to fail to link.
#include <errno.h>
int main(void)
{
printf("%d\n", errno);
}
arm-linux-gcc -static -pthread -o tst tst.o
arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libc.a(__errno_location.os):
In function `__errno_location': __errno_location.c:(.text+0x0):
multiple definition of `__errno_location'
arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libpthread.a
(errno_location.os):errno_location.c:(.text+0x0): first defined here
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
On other architectures exit status of 0x007f is not possible,
they don't have signal 127.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
|
As in timerfd.h, eventfd.h needs arch-specific definition files.
alpha, mips and sparc needs separate file, all the other arch
will use common definition.
This problem is already fixed in glibc.
Also sanitize and provide bits for hppa.
Make sure not to install the new bits/eventfd unless eventfd support is
enabled.
Signed-off-by: Hiroaki KAWAI <kawai@stratosphere.co.jp>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
The reason truncate64 takes 4 args on some arches is that their ABI
requires 64bit values to be aligned on register pair boundaries.
Since this alignment affects more than just truncate64, rename the
define to properly document its purpose. This also allows us to
expand it to the other impacted syscalls (which will be done in a
follow up commit).
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
The name was changed to include a trailing 'D' when it went into the
kernel.
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
URL: https://bugs.busybox.net/show_bug.cgi?id=5888
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
This drops __signed, __volatile, and __const. Only the latter was
used in the code base, and for uClibc, not consistently. Much of
the code used plain "const" which meant "__const" was useless.
Really, the point of this is to stay in sync with what glibc did.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
This matches a similar change made to glibc.
No functional changes here.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
CLOCK_MONOTONIC_RAW is available since 2.6.28
(2d42244ae71d: clocksource: introduce CLOCK_MONOTONIC_RAW), and
CLOCK_*_COARSE since 2.6.32 (da15cfdae033: time: Introduce
CLOCK_REALTIME_COARSE).
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Add a comment to uClibc_stdio.h to keep macros in sync with uClibc_mutex.h
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Move h_errno related stuff to separate file.
Do not hide errno and h_errno for non-TLS, else it keeps being 0.
Make __[h_]errno_location weak for non-TLS.
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Define a common view of __errno_location, __h_errno_location in common header
and use that everywhere, __uClibc_main.c is no special.
The rule adopted:
for enabled threads we make in libc the __GI_x() variants strong, x() weak
and (should) provide another strong x() in libpthread.
If threads are disabled, even the __GI_x() variants are weak.
_stdio_init,_stdio_term,_locale_init: make all hidden weak in common header
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
My intention was to get rid of uClibc_mutex.h completely on install, but it
introduces other dependencies. It affects anyway only the installed case.
Note: since NPTL was added, the FILE structure changes between the build
and the installed version. I wanted to fix this by the earlier commit.
Reverting the behaviour to IMHO a wrong one.
While there, remove libc-lock.h and stdio-lock.h on install (even though
glibc has them -wrongly- installed).
Reported-by: Tony Wu <tung7970@gmail.com>
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
This should come properly from features.h or the build.
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Provide __UCLIBC_IO_MUTEX for the installed version
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Redefining stuff is no good for consistency, anyway,
Config.in takes care of this case, it can't happen.
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Try to have one and only view of settings, no special handling for stdio code.
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Move __stdio_mutex_init,_stdio_openlist_{use,del}_count to _stdio.h.
Make _stdio_validate_FILE hidden.
Make _stdio_openlist_{add,del}_lock hidden for non-NPTL.
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
add hidden significand, lgamma_r, scalb, log2, gamma
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
LT old and new provided SEM_VALUE_MAX in semaphore.h, NPTL in local_lim.h
Make sure to get the same definitions, independently of the fact, that
semaphore.h is included or not.
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
uClibc_posix_opt.h: adapt accordingly
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
add uClibc_posix_opt.h to handle uClibc specific options/features
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
avoid the possibility to use the wrong bits/local_lim.h
uClibc_local_lim.h fix it be correct for LT
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
solve inconsistency between archs
NPTL should not use __syscall_rt_sigaction at all, for now it needs to be visible
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Since glibc has split out arch-specific stuff to bits/epoll.h, we can
pull that sanity back into our tree and drop the arch ifdefs.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
glibc has split off the arch-specific flag definitions (like
SFD_NONBLOCK) into <arch>/bits/signalfd.h, so that there are no longer
multiple redundant copies of the entire header file. We will adopt the
same scheme in uClibc.
Special cases are included for: alpha mips sparc
hppa was omitted because it has not been updated in glibc.
All others use the common definition.
Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
glibc has split off the arch-specific flag definitions (like
TFD_NONBLOCK) into <arch>/bits/timerfd.h, so that there are no longer
multiple redundant copies of the entire header file. We will adopt the
same scheme in uClibc.
Special cases are included for: alpha mips sparc
hppa was omitted because it has not been updated in glibc.
All others use the common definition.
Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
glibc has split off the arch-specific flag definitions (like
IN_NONBLOCK) into <arch>/bits/inotify.h, so that there are no longer
multiple redundant copies of the entire header file. We will adopt the
same scheme in uClibc.
Special cases are included for: alpha mips sparc
hppa was omitted because it has not been updated in glibc.
All others use the common definition.
Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
use it
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
|
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Most stuff was taken from the eglibc.
Signed-off-by: Henning Heinold <heinold@inf.fu-berlin.de>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
So application query if specified module is loaded or not with
dlopen.
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|