Age | Commit message (Collapse) | Author |
|
Fix problem which might exist since 2011. We need to execute
the destructors for all dependant libraries, before munmap the
shared libraries, otherwise running destructor of a dependent library
might cause a segfault, trying to access an already unmapped memory.
This fixes for example segfaults while running php -m with ldap
module.
Reported-By: Dave Flogeras <dflogeras2@gmail.com>
Tested-By: Dave Flogeras <dflogeras2@gmail.com>
|
|
Revert 35105679b9a900d58dadd0852e679c235f8176ba and add some debug
code.
|
|
|
|
|
|
The munmap was still called with broken length, as sometimes
start was empty. This finally solves segfaults when running
php -m with ldap module activated.
|
|
|
|
|
|
|
|
This reverts commit bf4c2d242f587700e3eb2ffd5721ddaf3cdbc7e5.
|
|
There is a patch included in https://bugs.busybox.net/show_bug.cgi?id=6158
from 2013, which was never applied.
This really fixes the php -m segfaults.
|
|
This reverts commit 952bb00f0b2eb576b0bf48c4f87018429a42e28d.
And adds this fix for 64 Bit systems.
http://lists.busybox.net/pipermail/uclibc/2014-December/048737.html
|
|
Sync with GNU C library and consolidate duplicate non
architecture specific defines.
MAP_UNINITIALIZED is only defined to 0x4000000 and used by
the Linux kernel when CONFIG_MMAP_ALLOW_UNINITIALIZED is enabled.
CONFIG_MMAP_ALLOW_UNINITIALIZED is only available for nommu.
See Documentation/nommu-mmap.txt.
|
|
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>
|
|
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.
|
|
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>
|
|
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>
|
|
Signed-off-by: Alex Potapenko <opotapenko@gmail.com>
Signed-off-by: Waldemar Brodkorb <wbx@uclibc-ng.org>
|
|
Latest binutils 2.29 release emits a R_MICROBLAZE_NONE
relocation, which breaks shared library loader bootstrap
relocation.
|
|
|
|
This reverts commit 9b42da7d0558884e2a3cc9a8674ccfc752369610.
This fixes a long standing bug in dlclose().
Can be seen with apache and mod_php or just by executing
php -m to list all modules.
Reported-by: Bernd Kuhls <bernd.kuhls@t-online.de>
|
|
|
|
|
|
|
|
Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
|
|
Binutils emits by default lazy relocations for TLSDESC and
ld.so need to handle that. Fixes problems like:
can't handle reloc type 0x407
|
|
Inner loop was using same counter variable (i) as the outer loop, therefore
making outer loop terminate before it visited all of the ELF program segments.
Surrounding code in this inner loop clearly shows the intention that this loop
should not affect the outer one, therefore leading me to the conclusion that
this should be a bug an not expected code.
This bug was detected due to some other bug in ARC binutils that kept setting
TEXTREL for any PIE application.
Apart from the but, I have also moved the debug message inside of the TEXTREL
condition as mprotect is only really called if TELTREL is set.
|
|
_dl_zalloc callers don't check for allocaton failure. It kind of makes
sense since such early allocations are unlikely to fail, and even if
they do, ldso would segv anyways thus bringing the issue to attention.
However there's a gcc nuance which led to this patch.
It seems gcc at -O2 (for DODEBUG build), does additional coge gen
analysis for pointer dereference from erroneous paths and it "isolates"
such code paths with a intrinsic abort/trap etc.
The ldso code fragment which was triggering this:
| add_ldso(struct dyn_elf *rpnt)
| if (rpnt)
| ...
| else
| rpnt = _dl_zalloc()
|
| rpnt->dyn = tpnt <---- potential NULL pointer deref
ARC gcc currently generates an abort() call which doesn't exist in ldso,
causing link errors (with a newer vrsion of binutils).
ARM gcc 6.2.1 behaves similarly, altough instead of abort, it generates
a trap inducing UDF instruction
| 367c: ebfffb79 bl 2468 <_dl_malloc>
| 3680: e51b2068 ldr r2, [fp, #-104] ; 0xffffff98
| 3684: e3500000 cmp r0, #0
| 3688: 0a000006 beq 36a8 <_dl_add_elf_hash_table+0x280>
| ...
| 36a8: e5862000 str r2, [r6]
| 36ac: e7f000f0 udf #
So add an explict dl_exit() in dl_zalloc error case to beat the
compiler.
Note that this error propagagtion analysis stops if the function in
consideration (_dl_zalloc) is NOT inlined. Hence the reason it only
shows up for DODEBUG builds which builds ldso at -O2 which is more
aggressive about inlining.
If this patch is not considered worth applying then the workaround
suggested by Claudiu is to to build ldso with
-fno-isolate-erroneous-paths-dereference
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
|
|
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
|
|
|
|
the --discard-* toggles take away the symbols which comes in the way
when staring at objdumps for debugging low level issues
So don't discard symbols for DODEBUG builds
before
-----
3388: j_s.d [blink]
338a: add_s sp,sp,0x18
338c: b.d 332c <_dl_add_elf_hash_table+0x50>
3390: mov_s r2,0
3392: nop_s
3394: push_s blink <--- function not called out
3396: st.aw r13,[sp,-20]
339a: std r14r15,[sp,4]
339e: std r16r17,[sp,12]
after
-----
3388: j_s.d [blink]
338a: add_s sp,sp,0x18
338c: b.d 332c <_dl_add_elf_hash_table+0x50>
3390: mov_s r2,0
3392: nop_s
00003394 <add_ldso.isra.9>:
3394: push_s blink
3396: st.aw r13,[sp,-20]
339a: std r14r15,[sp,4]
339e: std r16r17,[sp,12]
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
|
|
... before falling back to ld.so installation path (it is not the same -
gcc uses /lib/ld-uClibc-x86-64.so.0 for uClibc) or default /lib:/usr/lib.
This matches glibc behavior (see trusted-dirs.h generated during glibc
build).
Signed-off-by: Alexey Neyman <stilor@att.net>
|
|
Ported over from GNU C Library and runtime tested in Qemu.
|
|
implementation
Signed-off-by: mirabilos <m@mirbsd.org>
Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
|
|
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>
|
|
This removes _DYNAMIC@gotpc from elf_machine_load_address()
This is a seperate commit to callout the fact that old code was actually
broken but was NOT caught since it never gets called (and will never be)
since ld.so only calls it if kernel doesn't pass AT_BASE auxvt, which is
not true for Linux.
if (!auxvt[AT_BASE].a_un.a_val)
auxvt[AT_BASE].a_un.a_val = elf_machine_load_address();
So while the intent was to remove _DYNAMIC@gotpc construct, we need to
come up with something which works.
The build time address computation of .dynamic which works well is:
- "ld %1, [pcl, _DYNAMIC@gotpc] \n"
+ "ld %1, [pcl, _GLOBAL_OFFSET_TABLE_@pcl] \n"
However the runtime address of .dynamic can only be generated with
"add %0, pcl, _DYNAMIC@pcl \n"
which unfortunately is what is currently broken as it is converted to
i_GLOBAL_OFFSET_TABLE_t and thus refers to runtime address of .got and
not .dyanmic
Thus we resort to using an arbit symbol _dl_start at the expense of an
extra GOT entry and a bogus R_ARC_NONE relo in ldso itself which now
needs to be ignored.
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
|
|
This converts elf_machine_dynamic() to not use the _DYNAMIC@xx construct
which was historically converted by assembler into _GLOBAL_OFFSET_TABLE
Now that "hack" is being removed from assembler, we need to make sure
that no code relies on that magic "conversion".
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
|
|
Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
|
|
Signed-off-by: Matthew Fortune <Matthew.Fortune@imgtec.com>
|
|
Fixes following problem, when trying to compile a simple
C application statically with a FDPIC toolchain (for example
with Blackfin architecture):
lib/libc.a(libdl.os): In function `do_dlclose':
(.text+0x6be): undefined reference to `_dl_free'
..
|
|
|
|
Only static linking is supported for now.
More debugging and analyzing for ld.so, TLS and NPTL
is required. But at least you can bootup a static
root fileystem in Qemu.
|
|
Not perfect, but a starting point.
Some tests of the test suite are failing.
|
|
|
|
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
|
|
|
|
This commit reverses a change introduced in commit 20554a78a9bba that
split some of the ARC code into two based on whether uClibc was
configured with native threads or not.
The native thread code was updated to use the relocation syntax of
modern binutils, while the non-native code path used a syntax only
accepted in older versions of binutils.
The problem with this is that the choice of old binutils or not is
orthogonal to the choice of native threads or not, and so, inevitably a
user with a recent version of binutils can make the choice to configure
uClibc with non-native thread support, and run into code that will not
assemble.
The solution is either to abandon support for the old tools completely,
or to add a new compile time flag for ARC that is set when the version
of binutils being used is old; this new flag would allow the old
relocation structure to be selected.
In this commit I have simply dropped support for older versions of the
tools.
|
|
This commit adds support for R_ARC_JMP_SLOT relocations during the
bootstrap phase of the dynamic linker. These relocations will be
generated if uClibc-ng is configured with 'DODEBUG=y'.
|
|
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>
|