| Commit message (Expand) | Author | Age | Files | Lines |
| * | make dlerror conform to posix•••the error status is required to be sticky after failure of dlopen or
dlsym until cleared by dlerror. applications and especially libraries
should never rely on this since it is not thread-safe and subject to
race conditions, but glib does anyway.
| Rich Felker | 2012-03-23 | 1 | -6/+16 |
| * | protect against cancellation in dlopen•••i'm not sure that it's "correct" for dlopen to block cancellation
when calling constructors for libraries it loads, but it sure seems
like the right thing. in any case, dlopen itself needs cancellation
blocked.
| Rich Felker | 2012-02-07 | 1 | -2/+5 |
| * | reduce some wasted space in dso structure | Rich Felker | 2012-02-07 | 1 | -3/+3 |
| * | run ctors/dtors for shared objects loaded with dlopen | Rich Felker | 2012-02-06 | 1 | -0/+1 |
| * | add support for init/finit (constructors and destructors)•••this is mainly in hopes of supporting c++ (not yet possible for other
reasons) but will also help applications/libraries which use (and more
often, abuse) the gcc __attribute__((__constructor__)) feature in "C"
code.
x86_64 and arm versions of the new startup asm are untested and may
have minor problems.
| Rich Felker | 2012-02-06 | 1 | -0/+19 |
| * | include dummied-out dlopen and dlsym functions for static binaries•••these don't work (or do anything at all) but at least make it possible
to static link programs that insist on "having" dynamic loading
support...as long as they don't actually need to use it.
adding real support for dlopen/dlsym with static linking is going to
be significantly more difficult...
| Rich Felker | 2012-02-03 | 1 | -1/+10 |
| * | fix broken copy relocations from dynamic linker cleanup•••this issue affected programs which use global variables exported by
non-libc libraries.
| Rich Felker | 2012-01-23 | 1 | -1/+4 |
| * | dynamic linker support for PIE binaries (position-independent main program)•••even with this change, PIE will not work yet due to deficiencies in
the crt1.o startup code.
| Rich Felker | 2012-01-23 | 1 | -3/+6 |
| * | cleanup dynamic linker, removing some code duplication | Rich Felker | 2012-01-23 | 1 | -78/+64 |
| * | fix dynamic linker not to depend on DYNAMIC ptr in 0th entry of GOT•••this fixes an issue using gold instead of gnu ld for linking. it also
should eliminate the need of the startup code to even load/pass the
got address to the dynamic linker.
based on patch submitted by sh4rm4 with minor cosmetic changes.
further cleanup will follow.
| Rich Felker | 2012-01-20 | 1 | -3/+12 |
| * | fix char signedness bug in dynlinker hash function•••this only affects non-ascii symbol names, which are probably not in
use anyway..
| Rich Felker | 2012-01-17 | 1 | -1/+2 |
| * | dlsym entry point for arm | Rich Felker | 2011-10-01 | 1 | -0/+6 |
| * | dynamic linker entry point for arm•••mildly tested, seems to work
| Rich Felker | 2011-10-01 | 1 | -0/+14 |
| * | disable dynamic linking/loading code in static libc builds, for now•••it does not work, but some configure scripts will falsely detect
support then generate programs that crash when they call dlopen.
| Rich Felker | 2011-09-18 | 1 | -0/+2 |
| * | fix RTLD_NEXT on x86_64•••the return address was being truncated to 32 bits, preventing the
dlsym code from determining which module contains the calling code.
| Rich Felker | 2011-09-03 | 1 | -1/+1 |
| * | ldso: move the suid/secure check code closer to env/auxv processing•••this does not change behavior, but the idea is to avoid letting other
code build up between these two points, whereby the environment
variables might get used before security it checked.
| Rich Felker | 2011-08-16 | 1 | -7/+7 |
| * | honor AT_SECURE aux vector flag | Rich Felker | 2011-08-16 | 1 | -2/+2 |
| * | RTLD_NEXT support•••the asm wrapper is needed to get the return address without
compiler-specific extensions.
| Rich Felker | 2011-08-16 | 4 | -3/+32 |
| * | LD_PRELOAD support | Rich Felker | 2011-08-16 | 1 | -0/+20 |
| * | when resolving symbols with only weak defs, use first def, not last def | Rich Felker | 2011-07-25 | 1 | -0/+1 |
| * | fix resolution of weak symbols (hopefully right now) and vdso | Rich Felker | 2011-07-24 | 1 | -3/+9 |
| * | load vdso, if present, into the dso list | Rich Felker | 2011-07-24 | 1 | -2/+31 |
| * | simplify dynamic linker startup•••instead of creating temp dso objects on the stack and moving them to
the heap if dlopen/dlsym are used, use static objects to begin with,
and just donate them to malloc if we no longer need them.
| Rich Felker | 2011-07-24 | 1 | -23/+17 |
| * | fix dlopen UB due to longjmp/volatile rules violation | Rich Felker | 2011-07-01 | 1 | -1/+1 |
| * | simple rpath support (no token expansion yet) for dynamic linker | Rich Felker | 2011-06-30 | 1 | -2/+8 |
| * | textrel support, cheap and ugly | Rich Felker | 2011-06-29 | 1 | -0/+5 |
| * | reclaim the memory wasted by dynamic linking for use by malloc | Rich Felker | 2011-06-28 | 1 | -0/+39 |
| * | use load address from elf header if possible•••this is mostly useless for shared libs (though it could help for
prelink-like purposes); the intended use case is for adding support
for calling the dynamic linker directly to run a program, as in:
./libc.so ./a.out foo
this usage is not yet supported.
| Rich Felker | 2011-06-28 | 1 | -1/+1 |
| * | make dynamic linker relocate the main program image last, after all libs•••prior to this change, copy relocations for initialized pointer
variables would not reflect the relocated contents of the pointer.
| Rich Felker | 2011-06-28 | 1 | -0/+1 |
| * | fix stale pointer issue in dynamic linker with dlopen | Rich Felker | 2011-06-26 | 1 | -0/+1 |
| * | don't leave the lock held on dlopen failure.. | Rich Felker | 2011-06-26 | 1 | -2/+2 |
| * | add RTLD_DEFAULT support | Rich Felker | 2011-06-26 | 1 | -1/+2 |
| * | in dlopen: don't use null pointer•••deps can be null if a library has no dependencies (such as libc itself)
| Rich Felker | 2011-06-26 | 1 | -3/+3 |
| * | fix resolving symbols in objects loaded in RTLD_LOCAL mode•••basically we temporarily make the library and all its dependencies
part of the global namespace but only for the duration of performing
relocations, then return them to their former state.
| Rich Felker | 2011-06-26 | 1 | -0/+11 |
| * | experimental dlopen/dlsym and dynlink changes needed to support them | Rich Felker | 2011-06-26 | 1 | -8/+125 |
| * | error handling in dynamic linking•••some of the code is not yet used, and is in preparation for dlopen
which needs to be able to handle failure loading libraries without
terminating the program.
| Rich Felker | 2011-06-26 | 1 | -2/+19 |
| * | fix some symbol resolution issues in dynamic linker•••1. search was wrongly beginning with lib itself rather than dso head
2. inconsistent resolution of function pointers for functions in plt
| Rich Felker | 2011-06-25 | 1 | -4/+4 |
| * | handle library paths better (ignore empty path components, etc.) | Rich Felker | 2011-06-25 | 1 | -3/+5 |
| * | fix possible (questionable) strict aliasing violations and ptr arith | Rich Felker | 2011-06-25 | 1 | -3/+3 |
| * | proper path searching for dynamic linker•••first, use $LD_LIBRARY_PATH unless suid. if that fails, read path from
/etc/ld-musl-$ARCH.path and fallback to a builtin default.
| Rich Felker | 2011-06-25 | 1 | -14/+38 |
| * | discard dso descriptors after performing relocations•••eventually (once dlopen exists) this behavior will be conditional on
dlopen/dlsym not being reachable.
| Rich Felker | 2011-06-25 | 1 | -0/+12 |
| * | keep track of which dsos have been relocated | Rich Felker | 2011-06-25 | 1 | -0/+1 |
| * | prepare support for LD_LIBRARY_PATH (checking suid/sgid safety)•••the use of this test will be much stricter than glibc and other
typical implementations; the environment will not be honored
whatsoever unless the program is confirmed non-suid/sgid by the aux
vector the kernel passed in. no fallback to slow syscall-based
checking is used if the kernel fails to provide the information; we
simply assume the worst (suid) in this case and refuse to honor
environment.
| Rich Felker | 2011-06-23 | 1 | -0/+6 |
| * | make ldso asm more uniform with rest of codebase (no unnecessary suffixes) | Rich Felker | 2011-06-19 | 1 | -12/+12 |
| * | x86_64: ensure that dtor pointer passed to app is 0 so it won't be used•••leaving it uninitialized caused unpredictable crashes or worse due to
calling an indeterminate function pointer.
| Rich Felker | 2011-06-19 | 1 | -0/+1 |
| * | dynamic linker 64bit fix: hash table entries are always 32bit | Rich Felker | 2011-06-18 | 1 | -2/+2 |
| * | experimental dynamic linker!•••some notes:
- library search path is hard coded
- x86_64 code is untested and may not work
- dlopen/dlsym is not yet implemented
- relocations in read-only memory won't work
| Rich Felker | 2011-06-18 | 3 | -0/+412 |
| * | various changes in preparation for dynamic linking support•••prefer using visibility=hidden for __libc internal data, rather than
an accessor function, if the compiler has visibility.
optimize with -O3 for PIC targets (shared library). without heavy
inlining, reloading the GOT register in small functions kills
performance. 20-30% size increase for a single libc.so is not a big
deal, compared to comparaible size increase in every static binaries.
use -Bsymbolic-functions, not -Bsymbolic. global variables are subject
to COPY relocations, and thus binding their addresses in the library
at link time will cause library functions to read the wrong (original)
copies instead of the copies made in the main program's bss section.
add entry point, _start, for dynamic linker.
| Rich Felker | 2011-02-24 | 1 | -0/+8 |