summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-elf
Commit message (Collapse)AuthorAgeFilesLines
* This code has no copyright. It is fairly obvious to me that we're aimp2008-10-131-14/+48
| | | | | | | | | | derivitive of NetBSD's mips_reloc.c, so pull in the copyright notice from there. Also, a minor tweak to load/store pointers. Other changes from NetBSD likely would be useful too... Obtained from: NetBSD
* MFp4: Fix a bug in the mips relocation code that prevents shared imagesimp2008-10-101-22/+14
| | | | | | | | | | | | | | | | | | | | | | | | from working. From p4 filelog of the upstream file in p4 //depot/projects/mips2-jnpr/src/libexec/rtld-elf/mips/reloc.c ... #6 change 140737 edit on 2008/04/27 by gonzo@gonzo_jeeves (text+ko) o Looks like handler for R_MIPS_REL32 brought by CS 137942 is broken for tradmips. Code from NetBSD's libexec/ld.elf_so/arch/mips/mips_reloc.c works just fine. ... #3 change 137942 edit on 2008/03/17 by rrs@rrs-mips2-jnpr (text+ko) Any relocation symbol lookup if its 0. It looks like this is the way the compiler indicates you need to look in another shared library. When we hit these as we relocate a object we will do the symbol lookups and setup the relocation table with the right value. Submitted by: rrs@, gonzo@
* Allow strong symbols to override weak ones for lookups done throughkan2008-10-101-4/+21
| | | | | | | | dlsym with RTLD_NEXT/RTLD_SELF handles. Allow symbols from ld-elf.so to be located this way too. Based on report and original patch from sobomax@.
* Allow multiple locks to be acquired by detecting correspondingdavidxu2008-09-161-2/+2
| | | | | | | | bit flag, otherwise if a thread acquired a lock, another thread or the current thread itself can no longer acquire another lock because thread_mask_set() return whole flag word, this results bit leaking in the word and misbehavior in later locking and unlocking.
* Make sure internal rtld malloc routines are not called from unlockedkan2008-09-031-14/+17
| | | | | | | | | | | | | contexts as rtld's malloc is not thread safe and is only supposed to be called with exclusive bind lock already held. The originating PR submitted a patch on top of different pre-requisite workaroud for unsafe dlopen calls, and the patch was midief slighlty to apply to stock sources for the purpose of this commit. Running rtld malloc from unlocked contexts is a bug on its own. PR: 126950 Submited by: Oleg Dolgov
* Enable GCC stack protection (aka Propolice) for userland:ru2008-06-251-0/+2
| | | | | | | | | | | | | | | | | | | | | - It is opt-out for now so as to give it maximum testing, but it may be turned opt-in for stable branches depending on the consensus. You can turn it off with WITHOUT_SSP. - WITHOUT_SSP was previously used to disable the build of GNU libssp. It is harmless to steal the knob as SSP symbols have been provided by libc for a long time, GNU libssp should not have been much used. - SSP is disabled in a few corners such as system bootstrap programs (sys/boot), process bootstrap code (rtld, csu) and SSP symbols themselves. - It should be safe to use -fstack-protector-all to build world, however libc will be automatically downgraded to -fstack-protector because it breaks rtld otherwise. - This option is unavailable on ia64. Enable GCC stack protection (aka Propolice) for kernel: - It is opt-out for now so as to give it maximum testing. - Do not compile your kernel with -fstack-protector-all, it won't work. Submitted by: Jeremie Le Hen <jeremie@le-hen.org>
* Make the meaning of the %A format specifier, as passed tobms2008-05-151-2/+5
| | | | LD_TRACE_LOADED_OBJECTS_FMT[12], more obvious for users like me.
* Fix the problem with the C++ exception handling for the multithreadedkib2008-05-063-4/+8
| | | | | | | | | | | | | | | | | | | | programs. From the PR description: The gcc runtime's _Unwind_Find_FDE function, invoked during exception handling's stack unwinding, is not safe to execute from within multiple threads. FreeBSD' s dl_iterate_phdr() however permits multiple threads to pass through it though. The result is surprisingly reliable infinite looping of one or more threads if they just happen to be unwinding at the same time. Introduce the new lock that is write locked around the dl_iterate_pdr, thus providing required exclusion for the stack unwinders. PR: threads/123062 Submitted by: Andy Newman <an at atrn org> Reviewed by: kan MFC after: 2 weeks
* MFp4: Add mips support for dynamic linking.imp2008-04-045-5/+602
| | | | | | | This code came from the merged mips2 and Juniper mips repositories. Warner Losh, Randall Seager, Oleksandr Tymoshenko and Olivier Houchard worked to merge, debug and integrate this code. This code may also contain code derived from NetBSD.
* For un-prototyped static inline functions declared in pthread_md.h onrwatson2007-12-011-1/+1
| | | | | | sparc64, use ANSI function headers and specifically indicate the lack of arguments with 'void'. Otherwise, warnings are generated at WARNS=3 for libkse, leading to a compile failure with -Werror.
* Include an extra header to get a function prototype.jb2007-11-191-0/+1
|
* - Fix the handling of R_SPARC_OLO10, which is a bit of a special casemarius2007-10-161-9/+14
| | | | | | | | | | | | | | | | | | | | in the way we implement handling of relocations. As for the kernel part this fixes the loading of lots of modules, which failed to load due to unresolvable symbols when built after the GCC 4.2.0 import. This wasn't due to a change in GCC itself though but one of several changes in configuration done along the import. Specfically, HAVE_AS_REGISTER_PSEUDO_OP, which causes GCC to denote global registers used for scratch purposes and in turn GAS uses R_SPARC_OLO10 relocations for, is now defined. While at it replace some more ELF_R_TYPE which should have been ELF64_R_TYPE_ID but didn't cause problems so far. - Sync a sanity check between kernel and rtld(1) and change it to be maintenance free regarding the type used for the lookup table. - Sprinkle const on lookup tables. - Use __FBSDID. Reported and tested by: yongari MFC after: 5 days
* Unbreak the dynamic linker by not creating a cache for rtld-elfmarcel2007-07-151-2/+6
| | | | | | | | | itself. It needs mmap(2), which now needs getosreldate(3) and which in turn uses a global variable to cache the result. This cannot be done before linking is done. See also: ../sparc64/reloc.c:1.15 Approved by: re (kensmith)
* Cache does not serve any purpose when rtld is relocating itself, dokensmith2007-07-131-2/+6
| | | | | | | not bother allocating one. Submitted by: kan Approved by: re (bmah)
* Add r_debug_state to the list of symbols exported from rtld. GDB needs tokan2007-07-111-0/+1
| | | | | | be able to find it in order to trap shared library events from rtld. Approved by: re (rwatson)
* Update the man page to reflect that certain variables will be unset incsjp2007-05-171-2/+4
| | | | | the case that the program is set-user-ID or set-group-ID. Add missing annotations for LIBMAP and LIBMAP_DISABLE.
* In the event a process is tainted (setuid/setgid binaries), un-set anycsjp2007-05-171-10/+20
| | | | | | | | | | | | | | | | | | | | potentially dangerous environment variables all together. It should be noted that the run-time linker will not honnor these environment variables if the process is tainted currently. However, once a child of the tainted process calls setuid(2), it's status as being tainted (as defined by issetugid(2)) will be removed. This could be problematic because subsequent activations of the run-time linker could honnor these dangerous variables. This is more of an anti foot-shot mechanism, there is nothing I am aware of in base that does this, however there may be third party utilities which do, and there is no real negative impact of clearing these environment variables. Discussed on: secteam Reviewed by: cperciva PR: kern/109836 MFC after: 2 weeks
* Don't enable symbol versioning on ia64 for now. It causesmarcel2007-05-161-0/+2
| | | | | | | symbol lookup failures that later result in null-pointer dereferences. This needs looking into, but since we're close to release it's possible that it's not resolved before that time.
* We don't need --export-dynamic for ld-elf.so.1, because it's amarcel2007-05-161-1/+0
| | | | shared object.
* Enable symbol versioning by default. Use WITHOUT_SYMVER to disable it.deischen2007-05-131-1/+3
| | | | | | | | | | Warning, after symbol versioning is enabled, going back is not easy (use WITHOUT_SYMVER at your own risk). Change the default thread library to libthr. There most likely still needs to be a version bump for at least the thread libraries. If necessary, this will happen later.
* Remove %m formatter, it's ifdef 0'ed in the code from the very beginningpav2007-05-121-2/+0
| | | | MFC after: 1 week
* Expand documentation for LD_TRACE_LOADED_OBJECTS_FMT? variablespav2007-05-121-0/+6
| | | | | | PR: docs/66265 (inspired by) Submitted by: Michel Lavondes <fox@vader.aacc.cc.md.us> MFC after: 1 week
* Fix a TLS memory leak.davidxu2007-05-051-0/+1
| | | | | PR: threads/112297 MFC: 1 week
* Catch up with the private namespace change (s/FBSDprivate/FBSDprivate_1.0).deischen2007-05-011-1/+1
|
* Retire rtld-specific Versions.def. Symbols exported by rtld are supposedkan2007-04-292-9/+3
| | | | | | | to override weak symbols exported by libc, so by definition these two are using the same symbol version names. Reflect the reality by referring to libc's Versions.def directly.
* Give the private version namespace a number to match libc.deischen2007-04-291-1/+1
|
* Use C comments since we now preprocess these files with CPP.deischen2007-04-292-2/+6
|
* Bring rtld exports in line with corresponding symbols exported fromkan2007-04-093-2/+8
| | | | | | | libc. Disable SYMVER_DEFAULT n rtld until its implications are understood better.
* Remove reference to FBSDprivate version. We do not use it in thiskan2007-04-071-7/+0
| | | | module yet.
* Catch up on rtld's special status. Since it does not appear onkan2007-04-071-0/+2
| | | | | | | | main object list, its versioning information needs to be examined separately. This hopefully fixes problems that people running with SYMVER_ENABLED are experiencing.
* Prepare rtld for symbol versioning. Disable it by default for now.kan2007-04-034-22/+50
|
* Implement dl_iterate_phdr function.kan2007-04-033-21/+80
| | | | | Convert boolean flags in internal Obj_Entry structure into bitfields. Properly check for loaded segment alignment in map_object.
* Use u_int for variable manipulated by atomic ops to match atomickan2007-04-031-1/+1
| | | | ops function prototypes.
* Document LD_UTRACE.jhb2007-01-231-2/+7
| | | | MFC after: 3 days
* Add various utrace's for use with ktrace to the ELF runtime linker. Tojhb2007-01-091-0/+67
| | | | | | | | activate the traces, set the LD_UTRACE (or LD_32_UTRACE) environment variable. This also includes code in kdump(8) to parse the traces. Reviewed by: kan, jdp MFC after: 2 weeks
* Fix TLS on sparc64 for statically and dynamically linked binarieskmacy2006-10-081-2/+3
| | | | | Approved by: rwatson (mentor) Reviewed by: jmg and marcel
* Clean up white spaces and fix style(9).jkim2006-09-191-34/+32
|
* Fix the buggy rev. 1.117. dagmembers are only initialized for dlopen'edkib2006-09-191-5/+63
| | | | | | | | | | | | | dso that are actually loading. If dso a.so depends on b.so, then dlsym with handle from dlopen("b.so") will fail unconditionally. Correct implementation shall use the Obj_Entry.needed list to walk dependencies DAG. Test provided by: jkim Tested (prev. version) by: jkim, Nicolas Blais <nb_root at videotron ca>, h.blanke at chello nl Pointy hat to: kib Approved by: kan (mentor)
* Markup fixes.ru2006-09-171-2/+4
|
* When looking up the symbol by dlsym, look it not only in the objectkib2006-09-081-13/+10
| | | | | | | | | | given as dso handle, but also in the implicit dependencies of that dso. Also, const-ify the read-only parameter objlist of symlook_list. Reported by: "Simon 'corecode' Schubert" <corecode at fs ei tum de> Approved by: kan (mentor) X-MFC-After: 6.2
* Fix the variant I allocation for KSE: Allow a larger TCB and assumemarcel2006-09-011-51/+37
| | | | | that the documented TCB is at the tail of the extended TCB. In other words, the base of the TCB has a negative offset from the TLS.
* o Fix the static TLS relocation. We were subtracting the size ofmarcel2006-09-011-2/+2
| | | | | | the TCB. o Use NULL for null pointer argument. o Replace magic 8 with TLS_TCB_SIZE.
* Use NULL for null-pointer argument.marcel2006-09-011-1/+1
|
* Replace magic 16 with TLS_TCB_SIZE.marcel2006-08-312-2/+4
|
* Prevent dead code elimination for the TP assignmient by using inlinemarcel2006-08-301-2/+3
| | | | assembly.
* Remove alpha left-overs.ru2006-08-225-959/+0
|
* In symlook_obj(): fix _rtld_error output.delphij2006-08-041-2/+2
| | | | MFC After: 2 weeks
* *thwack*! all the world's not i386.des2006-03-291-0/+2
| | | | Pointy hat to: des
* Don't use dbg if it isn't defined (such as when this file is used bydes2006-03-281-0/+2
| | | | code outside of rtld-elf)
* Use C99's varadic macro syntax instead of gcc's.des2006-03-281-2/+2
|
OpenPOWER on IntegriCloud