Age | Commit message (Collapse) | Author |
|
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>
|
|
atomic_decrement_if_positive() returns the old value of &mem, not the
(sometimes undefined) value of __tmp.
Fixes the uClibc nptl/tst-sem3 test.
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Chris Zankel <chris@zankel.net>
|
|
Current code breaks libgcc unwind.
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Chris Zankel <chris@zankel.net>
|
|
Before the patch, the query itself was sent via UDP
(the query contained correct protocol ID).
The fix is taken from glibc.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
|
isfdtype(int fd, int fdtype) check whether a file descriptor fd is
of type fdtype, where the types are defined in stat(2). It is
supported in glibc and BSD, and used by utilities such as acpid.
Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Previous patch only fixed the build. This patch fixes the behavior at
run-time as well.
It fixes "Value too large for defined data type" messages caused by
fstat syscall wrapper returning -EOVERFLOW.
Signed-off-by: Mischa Jonker <Mischa.Jonker@synopsys.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
res_mkquery() takes out __resolv_lock to copy _res.options to function local
_res_options on line 4204, but later unsafely accesses _res.options without a
lock, instead of its local copy _res_options, on line 4221. Looks like a
period / underscore typo.
Signed-off-by: Vanya Sergeev <vsergeev@gmail.com>
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>
|
|
Sync up with the changes from C6X entering the kernel.
Signed-off-by: Luis Machado <lgustavo@codesourcery.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Commit a83ea57a50 introduces code for falling back on sendfile64
when the sendfile syscall is not available. However, as written,
that code leads to sendfile64 being globally hidden in situations
where __NR_sendfile and __USE_LARGEFILE64 are defined. In this case,
the flow executes strong_alias_untyped(sendfile,sendfile64) in
libc/sysdeps/linux/common/sendfile.c and libc_hidden_proto(sendfile64)
in include/sys/sendfile.h, but nowhere does it do libc_hidden_def(sendfile64).
This patch adds the needed libc_hidden_def(sendfile64).
This breaks, for example, xfsprogs on x86_64. Reported by mardok4
in IRC.
Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Since version 2.5 glibc allows prev to be a NULL pointer in insque, whereas
uClibc segfaults in this case. This fixes the issue and makes insque
initialize q_forw and q_back with NULLs if prev == NULL.
Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
uclibc is compiled with elf/dwarf and secondly HAVE_CPP_ASM_DEBUGINFO
is not defined so we generate bogus .stab sections needlessly
Some of post processing tools get confused when they see both
dwarf and stab sections
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
|
Prompted by lkml discussion of a MIPS bug where sending
signal 128 was found to be able to crash the machine :/
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
|
975bca165c3e10e74c05c0384fd58f45a7025a3c avoided relocations to
_obstack_newchunk used by obstack_vprintf but missed to enable the
corresponding public symbol which is used by the obstack macros.
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
This adds a straight forward implementation for obstack_printf and
obstack_vprintf on uClibc's already existing obstack_grow and
vasprintf. It does not attempt to port over glibc's implementation
in terms of _IO_* structs and functions.
Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.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>
|
|
Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono@st.com>
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
|
|
It's not safe to use the aux vect inside __uClibc_main if we are running
with shared libraries, because it could have been already modified.
For example, if some constructor plays with environment variables by
using unsetenv, the modifications done into the stack to unset an
environment variable, have impacts on the aux vect due to the extra NULL
entries added.
Due to this, __uClibc_main is not able to detect where the aux vect
starts, so all the entries that are used by __uClibc_main (AT_UID,
AT_EUID, AT_GID, AT_EGID, AT_PAGESZ and possibly other arch specific)
are impacted.
Same side effect on the aux vect is caused by the ld.so when running a
SUID program with some of the unsecure environment variables set, that
will be unset by the ld.so itself.
In order to fix this issue, it needs to handle aux vect entries into
__uClibc_main only if SHARED is not defined.
In SHARED case, libc refers to __dl_secure and _dl_pagesize as initialised
by the ld.so where the aux vext is still untouched.
Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono@st.com>
Reviewed-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
|
|
The syscall on 64bit ports takes 4 args as there is no need to split
up the value into two args. Add support for that to the common code.
Once we fix that, the mips code can now leverage it for its 64bit and
32bit needs. However, we can't just drop it entirely yet because its
n32 ABI needs special handling to treat it like a 64bit port. This
does change the existing behavior which treats the n32 like a 32bit
port, but we want to do this.
In the future, we'll probably have to introduce a define for this as
it currently affects x86_64/x32 and mips/n32.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
valloc was marked as LEGACY in SUSv2, removed from SUSv3 and later.
TODO: Remove this (point people to memalign and it's successors?).
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
valloc uses memalign
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
The pread64/write64 syscalls have the 64bit register align issue for
all arches. Use this new define so we can merge the powerc/xtensa
versions back into the common code.
SuperH is funky and also allows us to do this.
We should be able to merge the mips version too, but that'll require
someone to take a closer look as the current stuff doesn't look quite
right.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
The readahead syscall has the 64bit register align issue for all
arches. Only mips was handling this though.
Clean up the common readahead.c to use the SYSCALL_ALIGN_64BIT
define so that we can throw away the mips version and make this
work correctly on arm/ppc/xtensa.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
Now that we have a new SYSCALL_ALIGN_64BIT define for tracking the
64bit register shift behavior, use it. This allows us to delete
duplicated arm/xtensa files, as well as drop a few arch ifdefs from
common code.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
This macro takes care of the shift/mask split for us, so no need
to open code this ourselves and then use __LONG_LONG_PAIR.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
The 64bit register alignment issue only affects the O32 ABI, so wrap
the define accordingly. We don't want this being used for N32 ABIs.
This doesn't directly affect the N64 ABI since these files wouldn't
even be compiled for those targets (no need for the 32bit/64bit shim).
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
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>
|
|
This reverts commit e567c399ff86d007d8c4586f0dd5e0ca61e283ca.
since it breaks badly (e.g. busybox netstat)
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
This eliminates a source of reproduceable freezes
Signed-off-by: Mirko Vogt <dev@nanl.de>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Fixes displaying the nameserver in busybox nslookup.
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Mischa Jonker <mjonker@synopsys.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
We found that the testcase
int
main (void)
{
wchar_t s[10];
memset (s, 0, sizeof (s));
int r = sscanf ("s", "%ls", s);
printf ("%d\n", r);
printf ("%ls\n", s);
return 0;
}
printed
0
<blankline>
rather than the expected
1
s
The problem was the enum in _scanf.c, which has had a 'CONV_m' value
inserted. The attached patch fixes the problem in __psfs_parse_spec by
not presuming a particular displacement between the two sets of
char-like conversion values. With this patch the above program produces
the expected output.
Signed-off-by: Nathan Sidwell <nathan@codesourcery.com>
Signed-off-by: Bernd Schmidt <bernds@codesourcery.com>
|
|
Fixes bug #5342
res_query was silently rejecting responses against T_ANY DNS
questions.
Remove the type-filtering from res_query altogether.
__dns_lookup is supposed to return the proper stuff that you asked
for (and only that).
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Silence warning about shadowing wait
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
In res_iclose we were operating on the global _res even if called via
res_nclose where we are supposed to operate on the user provided
res_state.
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Meta cores are 32-bit, hardware multithreaded, general purpose, embedded
processors which also feature a DSP instruction set, and can be found in
many digital radios. They are capable of running different operating
systems on different hardware threads, for example a digital radio might
run RTOSes for DAB decoding and audio decoding on 3 hardware threads,
and run Linux on the 4th hardware thread to manage the user interface,
networking etc. HTPs are also capable of running SMP Linux on multiple
hardware threads.
Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
This avoids having to define __IPC_64 to 0 in each arch using the ABI
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Markos Chandras <markos.chandras@imgtec.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
CC libc/sysdeps/linux/common/fstat64.os
In file included from libc/sysdeps/linux/common/fstat64.c:16:
libc/sysdeps/linux/common/xstatconv.h:28: warning: 'struct kernel_stat'
declared inside parameter list
libc/sysdeps/linux/common/xstatconv.h:28: warning: its scope is only
this definition or declaration, which is probably not what you want
libc/sysdeps/linux/common/fstat64.c: In function 'fstat64':
libc/sysdeps/linux/common/fstat64.c:33: warning: passing argument 2 of
'__syscall_fstat64' from incompatible pointer type
libc/sysdeps/linux/common/fstat64.c:18: note: expected 'struct stat *'
but argument is of type 'struct stat64 *'
-------------------------------------------------------------------
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Markos Chandras <markos.chandras@imgtec.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
With Busybox and uClibc - both built w/o LFS, this caused ash to be
completely broken, as lseek was simply returning error.
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Markos Chandras <markos.chandras@imgtec.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
sys/time.h has libc_hidden_proto(utimes) which generates the hidden
"__GI_utimes" symbol reference, and common/utimes.c has a
libc_hidden_def(utimes) which generates the exported "utimes" alias.
As part of no-legacy-syscall kernel ABI, Commit 80dc2ed05
"utimes: Use utimensat if arch does not have the utimes syscall"
introduced a new wrapper, but missed the corresponding libc_hidden_def,
causing Busybox (1.20.0) link to fail (for ARC).
Also don't generate a STUB, in that case.
---------------->8-------------------
....
touch.c:(.text.touch_main+0xdc): undefined reference to `utimes'
touch.c:(.text.touch_main+0x114): undefined reference to `utimes'
libbb/lib.a(copy_file.o): In function `copy_file':
copy_file.c:(.text.copy_file+0x446): undefined reference to `utimes'
collect2: ld returned 1 exit status
---------------->8-------------------
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Markos Chandras <markos.chandras@imgtec.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
In C, signed integer overflow is undefined behavior. Many compilers
optimize away checks like `a + b < a'.
Use safe precondition testing instead.
Signed-off-by: Xi Wang <xi@mit.edu>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Partially revert e9af4dfbd328e9f3bba235fdb2d1027dd2dbbcde
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
New architectures don't define ARCH_WANT_IPC_PARSE_VERSION in their kernel.
This means that every cmd passed to semctl,msgctl and shmctl is IPC_64 by
default. For these architectures we need to define __IPC_64 as 0. Existing
architectures are not affected by this change.
Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|