#
1.34 |
|
10-Aug-2017 |
joerg |
Add IRELATIVE support for ARM, X86 and PowerPC.
|
Revision tags: perseant-stdc-iso10646-base
|
#
1.33 |
|
20-Jun-2017 |
joerg |
Add back symnum, fix debug print.
|
#
1.32 |
|
19-Jun-2017 |
joerg |
Replace COMBREL with just-in-time check in _rtld_relocate_nonplt_objects.
The COMBREL logic predates thread-safety of the dynamic linker and breaks the use of shared locks for the common symbol lookup case. It is unlikely to provide any benefit for lazy binding or PLT lookups, so provide equivalent functionality in the non-PLT relocation handling loop by checking if the symbol used by the current relocation is the same as the one used during the last lookup. No inter-object cachine is done as it is also unlikely to be benefical.
Testing with Firefox startup on AMD64 shows a small performance gain by the new method.
|
Revision tags: netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 pgoyette-localcount-20170320 bouyer-socketcan-base pgoyette-localcount-20170107 pgoyette-localcount-20161104 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base
|
#
1.31 |
|
14-Apr-2016 |
skrll |
branches: 1.31.8; Remove duplicated __RCSIDs I added years ago - I blame CVS.
Spotted by Miod Vallat
|
#
1.30 |
|
25-Aug-2014 |
joerg |
Add basic support for indirect functions. It allows providing a public function symbol with an implementation choosen at run time. Refactor calls to functions by address in ld.elf_so to create temporary function descriptors on the stack, if the address is not leaked outside.
Limitations: - no support for initialising static storage with function pointers - no support for unnamed resolver functions
Inspired by FreeBSD's r228435 by kib@freebsd.org.
|
Revision tags: netbsd-7-0-2-RELEASE netbsd-7-0-1-RELEASE netbsd-7-0-RELEASE netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 tls-maxphys-base
|
#
1.29 |
|
21-Mar-2014 |
matt |
branches: 1.29.4; Improve some of the rdbg messages to print the address of the pltgot slot being modified.
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE yamt-pagecache-tag8 netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE riastradh-drm2-base3 netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 yamt-pagecache-base5 yamt-pagecache-base4 netbsd-6-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base cherry-xenmp-base
|
#
1.28 |
|
25-Mar-2011 |
joerg |
branches: 1.28.4; 1.28.10; Add basic locking to ld.elf_so.
|
Revision tags: bouyer-quota2-nbase bouyer-quota2-base matt-mips64-premerge-20101231
|
#
1.27 |
|
06-Aug-2010 |
joerg |
Reduce header pollution for mdreloc.c. Make Obj_Entry argument of _rtld_relocate_nonplt_objects non-const in preparation for TLS support.
|
#
1.26 |
|
13-Jan-2010 |
christos |
PR/39240: Satoshi Suetake: Don't fail when attempting to resolve weak symbols when we are doing immediate binding, leave them alone and they will be dealt with later during lazy binding. From skrll@
|
Revision tags: matt-premerge-20091211
|
#
1.25 |
|
29-Aug-2009 |
jmmv |
Remove trailing \n in calls to _rtld_error: a newline is automatically added by a call to the function.
|
Revision tags: jym-xensuspend-nbase jym-xensuspend-base
|
#
1.24 |
|
16-Mar-2009 |
lukem |
Fix const issues (cast const pointers to "const uint8_t *" instead of "caddr_t")
NOTE: change based on ../i386/mdreloc.c 1.27 XXX: not compile tested
|
Revision tags: netbsd-5-1-5-RELEASE netbsd-5-1-4-RELEASE netbsd-5-1-3-RELEASE netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 netbsd-5-base matt-mips64-base2 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2
|
#
1.23 |
|
24-Jul-2008 |
skrll |
branches: 1.23.4; 1.23.6; RCSID police
|
#
1.22 |
|
24-Jul-2008 |
matt |
Refactor common code to _rtld_relocate_plt_object to i386 and arm so they act like the other versions. In _rtld_bind, if the result is 0, call _rtld_die. Initialize _rtld_sym_zero.st_value to -_rtld_objself.maprelocbase. Now when the symbol is resolved, st_value + maprelocbase will equal 0 and the above check in _rtld_bind will fire and a call to NULL will be avoided.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-revivesa-base-1 yamt-pf42-base4 yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 wrstuden-revivesa-base yamt-pf42-base keiichi-mipv6-base matt-armv6-nbase matt-armv6-prevmlocking wrstuden-fixsa-base-1 netbsd-4-0-RELEASE cube-autoconf-base netbsd-4-0-RC5 netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 matt-armv6-base matt-mips64-base hpcarm-cleanup-base wrstuden-fixsa-base abandoned-netbsd-4-base netbsd-4-base
|
#
1.21 |
|
21-May-2006 |
mrg |
branches: 1.21.20; avoid more GCC4 uninitialised variable problems. (sh3 known, vax guessed.)
|
#
1.20 |
|
20-Aug-2005 |
skrll |
Add __RCSID.
|
#
1.19 |
|
15-Aug-2005 |
skrll |
KNF
|
#
1.18 |
|
24-Jul-2005 |
skrll |
Support immediate PLT binding on vax. Tested on simh.
Nearly there...
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 netbsd-2-0-3-RELEASE netbsd-2-1-RELEASE netbsd-2-1-RC6 netbsd-2-1-RC5 netbsd-2-1-RC4 netbsd-2-1-RC3 netbsd-2-1-RC2 netbsd-2-1-RC1 netbsd-2-0-2-RELEASE netbsd-3-base netbsd-2-0-1-RELEASE netbsd-2-base netbsd-2-0-RELEASE netbsd-2-0-RC5 netbsd-2-0-RC4 netbsd-2-0-RC3 netbsd-2-0-RC2 netbsd-2-0-RC1 netbsd-2-0-base
|
#
1.17 |
|
24-Jul-2003 |
skrll |
branches: 1.17.4; ANSIfy and de-__P().
|
Revision tags: fvdl_fs64_base
|
#
1.16 |
|
03-Oct-2002 |
mycroft |
Skip the lazy PLT relocation if relocbase==0 (useful if libraries are loaded at their VMA address).
|
#
1.15 |
|
26-Sep-2002 |
mycroft |
Implement a self-relocate function for the VAX.
|
#
1.14 |
|
26-Sep-2002 |
mycroft |
Remove the `self' args to _rtld_relocate_objects() and _rtld_relocate_nonplt_objects().
|
#
1.13 |
|
25-Sep-2002 |
mycroft |
Push the _rtld_bind() interface into MD code -- it's just a trivial wrapper anyway.
|
#
1.12 |
|
12-Sep-2002 |
mycroft |
Nuke -DRTLD_RELOCATE_SELF and `dodebug' from orbit.
|
#
1.11 |
|
12-Sep-2002 |
mycroft |
_rtld_bind_start() is not used in MI code, so declare it in the MD code.
|
#
1.10 |
|
11-Sep-2002 |
junyoung |
Add $NetBSD$.
|
#
1.9 |
|
06-Sep-2002 |
mycroft |
Pass down an additional flag to _rtld_relocate_nonplt_objects() which indicates whether we're relocating ld.elf_so itself. Use this in some places rather than hackish tests on `dodebug'. (The Alpha and HPPA `dodebug' tests were actually noops, because RTLD_RELOCATE_SELF is not set, and therefore dodebug is always true.)
|
#
1.8 |
|
06-Sep-2002 |
mycroft |
Introduce a new flag, `isdynamic', which is used to remember whether the executable was of type ET_DYN. Use this instead of `mainprog' to determine whether we need to do base-relative fixups of the PLT. (This allows loading non-relocatable objects, should we desire to do that at some point...)
|
#
1.7 |
|
06-Sep-2002 |
mycroft |
Re-poison a lot of consts, now that the mark shite is gone.
|
#
1.6 |
|
06-Sep-2002 |
mycroft |
Split _rtld_relocate_plt_object() into two MD functions: * _rtld_relocate_plt_lazy() fixes up all the relocs pointing to the PLT. (On most platforms it just does a simple base-relative fixup; on SPARC it does nothing.) * _rtld_relocate_plt_object() does immediate binding for a PLT entry. The basic gist is that this saves a bit of time on SPARC (where the iteration through the pltrela table was gratuitous), and a little less time on all other platforms. A whole lot of #ifdef'ed crap is moved out of reloc.c, too.
NOT tested on: hppa sh x86_64
|
#
1.5 |
|
05-Sep-2002 |
mycroft |
Partially fix up some debug printf()s that don't need to use defobj.
|
#
1.4 |
|
05-Sep-2002 |
mycroft |
A few things: * Pass a symbol number to _rtld_find_symdef(), not a r_info. * Don't try to do a symbol lookup when we find an unsupported relocation; instead get the symbol name from the referencing object's strtab. * Add preliminary support for `-z combreloc'-style startup optimization on i386, `#ifdef COMBRELOC'.
|
#
1.3 |
|
05-Sep-2002 |
mycroft |
Rename _rtld_relocate_nonplt_object() to _rtld_relocate_nonplt_objects(), and push the outer loop into it. This actually shaves a couple % off startup time at least on PCs.
|
#
1.2 |
|
05-Sep-2002 |
mycroft |
Split _rtld_relocate_nonplt_object() into separate MD files.
|
#
1.1 |
|
05-Sep-2002 |
mycroft |
Make _rtld_setup_pltgot() a consistent interface on all platforms.
|
#
1.33 |
|
20-Jun-2017 |
joerg |
Add back symnum, fix debug print.
|
#
1.32 |
|
19-Jun-2017 |
joerg |
Replace COMBREL with just-in-time check in _rtld_relocate_nonplt_objects.
The COMBREL logic predates thread-safety of the dynamic linker and breaks the use of shared locks for the common symbol lookup case. It is unlikely to provide any benefit for lazy binding or PLT lookups, so provide equivalent functionality in the non-PLT relocation handling loop by checking if the symbol used by the current relocation is the same as the one used during the last lookup. No inter-object cachine is done as it is also unlikely to be benefical.
Testing with Firefox startup on AMD64 shows a small performance gain by the new method.
|
Revision tags: netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 pgoyette-localcount-20170320 bouyer-socketcan-base pgoyette-localcount-20170107 pgoyette-localcount-20161104 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base
|
#
1.31 |
|
14-Apr-2016 |
skrll |
Remove duplicated __RCSIDs I added years ago - I blame CVS.
Spotted by Miod Vallat
|
#
1.30 |
|
25-Aug-2014 |
joerg |
Add basic support for indirect functions. It allows providing a public function symbol with an implementation choosen at run time. Refactor calls to functions by address in ld.elf_so to create temporary function descriptors on the stack, if the address is not leaked outside.
Limitations: - no support for initialising static storage with function pointers - no support for unnamed resolver functions
Inspired by FreeBSD's r228435 by kib@freebsd.org.
|
Revision tags: netbsd-7-0-2-RELEASE netbsd-7-0-1-RELEASE netbsd-7-0-RELEASE netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 tls-maxphys-base
|
#
1.29 |
|
21-Mar-2014 |
matt |
branches: 1.29.4; Improve some of the rdbg messages to print the address of the pltgot slot being modified.
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE yamt-pagecache-tag8 netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE riastradh-drm2-base3 netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 yamt-pagecache-base5 yamt-pagecache-base4 netbsd-6-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base cherry-xenmp-base
|
#
1.28 |
|
25-Mar-2011 |
joerg |
branches: 1.28.4; 1.28.10; Add basic locking to ld.elf_so.
|
Revision tags: bouyer-quota2-nbase bouyer-quota2-base matt-mips64-premerge-20101231
|
#
1.27 |
|
06-Aug-2010 |
joerg |
Reduce header pollution for mdreloc.c. Make Obj_Entry argument of _rtld_relocate_nonplt_objects non-const in preparation for TLS support.
|
#
1.26 |
|
13-Jan-2010 |
christos |
PR/39240: Satoshi Suetake: Don't fail when attempting to resolve weak symbols when we are doing immediate binding, leave them alone and they will be dealt with later during lazy binding. From skrll@
|
Revision tags: matt-premerge-20091211
|
#
1.25 |
|
29-Aug-2009 |
jmmv |
Remove trailing \n in calls to _rtld_error: a newline is automatically added by a call to the function.
|
Revision tags: jym-xensuspend-nbase jym-xensuspend-base
|
#
1.24 |
|
16-Mar-2009 |
lukem |
Fix const issues (cast const pointers to "const uint8_t *" instead of "caddr_t")
NOTE: change based on ../i386/mdreloc.c 1.27 XXX: not compile tested
|
Revision tags: netbsd-5-1-5-RELEASE netbsd-5-1-4-RELEASE netbsd-5-1-3-RELEASE netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 netbsd-5-base matt-mips64-base2 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2
|
#
1.23 |
|
24-Jul-2008 |
skrll |
branches: 1.23.4; 1.23.6; RCSID police
|
#
1.22 |
|
24-Jul-2008 |
matt |
Refactor common code to _rtld_relocate_plt_object to i386 and arm so they act like the other versions. In _rtld_bind, if the result is 0, call _rtld_die. Initialize _rtld_sym_zero.st_value to -_rtld_objself.maprelocbase. Now when the symbol is resolved, st_value + maprelocbase will equal 0 and the above check in _rtld_bind will fire and a call to NULL will be avoided.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-revivesa-base-1 yamt-pf42-base4 yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 wrstuden-revivesa-base yamt-pf42-base keiichi-mipv6-base matt-armv6-nbase matt-armv6-prevmlocking wrstuden-fixsa-base-1 netbsd-4-0-RELEASE cube-autoconf-base netbsd-4-0-RC5 netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 matt-armv6-base matt-mips64-base hpcarm-cleanup-base wrstuden-fixsa-base abandoned-netbsd-4-base netbsd-4-base
|
#
1.21 |
|
21-May-2006 |
mrg |
branches: 1.21.20; avoid more GCC4 uninitialised variable problems. (sh3 known, vax guessed.)
|
#
1.20 |
|
20-Aug-2005 |
skrll |
Add __RCSID.
|
#
1.19 |
|
15-Aug-2005 |
skrll |
KNF
|
#
1.18 |
|
24-Jul-2005 |
skrll |
Support immediate PLT binding on vax. Tested on simh.
Nearly there...
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 netbsd-2-0-3-RELEASE netbsd-2-1-RELEASE netbsd-2-1-RC6 netbsd-2-1-RC5 netbsd-2-1-RC4 netbsd-2-1-RC3 netbsd-2-1-RC2 netbsd-2-1-RC1 netbsd-2-0-2-RELEASE netbsd-3-base netbsd-2-0-1-RELEASE netbsd-2-base netbsd-2-0-RELEASE netbsd-2-0-RC5 netbsd-2-0-RC4 netbsd-2-0-RC3 netbsd-2-0-RC2 netbsd-2-0-RC1 netbsd-2-0-base
|
#
1.17 |
|
24-Jul-2003 |
skrll |
branches: 1.17.4; ANSIfy and de-__P().
|
Revision tags: fvdl_fs64_base
|
#
1.16 |
|
03-Oct-2002 |
mycroft |
Skip the lazy PLT relocation if relocbase==0 (useful if libraries are loaded at their VMA address).
|
#
1.15 |
|
26-Sep-2002 |
mycroft |
Implement a self-relocate function for the VAX.
|
#
1.14 |
|
26-Sep-2002 |
mycroft |
Remove the `self' args to _rtld_relocate_objects() and _rtld_relocate_nonplt_objects().
|
#
1.13 |
|
25-Sep-2002 |
mycroft |
Push the _rtld_bind() interface into MD code -- it's just a trivial wrapper anyway.
|
#
1.12 |
|
12-Sep-2002 |
mycroft |
Nuke -DRTLD_RELOCATE_SELF and `dodebug' from orbit.
|
#
1.11 |
|
12-Sep-2002 |
mycroft |
_rtld_bind_start() is not used in MI code, so declare it in the MD code.
|
#
1.10 |
|
11-Sep-2002 |
junyoung |
Add $NetBSD$.
|
#
1.9 |
|
06-Sep-2002 |
mycroft |
Pass down an additional flag to _rtld_relocate_nonplt_objects() which indicates whether we're relocating ld.elf_so itself. Use this in some places rather than hackish tests on `dodebug'. (The Alpha and HPPA `dodebug' tests were actually noops, because RTLD_RELOCATE_SELF is not set, and therefore dodebug is always true.)
|
#
1.8 |
|
06-Sep-2002 |
mycroft |
Introduce a new flag, `isdynamic', which is used to remember whether the executable was of type ET_DYN. Use this instead of `mainprog' to determine whether we need to do base-relative fixups of the PLT. (This allows loading non-relocatable objects, should we desire to do that at some point...)
|
#
1.7 |
|
06-Sep-2002 |
mycroft |
Re-poison a lot of consts, now that the mark shite is gone.
|
#
1.6 |
|
06-Sep-2002 |
mycroft |
Split _rtld_relocate_plt_object() into two MD functions: * _rtld_relocate_plt_lazy() fixes up all the relocs pointing to the PLT. (On most platforms it just does a simple base-relative fixup; on SPARC it does nothing.) * _rtld_relocate_plt_object() does immediate binding for a PLT entry. The basic gist is that this saves a bit of time on SPARC (where the iteration through the pltrela table was gratuitous), and a little less time on all other platforms. A whole lot of #ifdef'ed crap is moved out of reloc.c, too.
NOT tested on: hppa sh x86_64
|
#
1.5 |
|
05-Sep-2002 |
mycroft |
Partially fix up some debug printf()s that don't need to use defobj.
|
#
1.4 |
|
05-Sep-2002 |
mycroft |
A few things: * Pass a symbol number to _rtld_find_symdef(), not a r_info. * Don't try to do a symbol lookup when we find an unsupported relocation; instead get the symbol name from the referencing object's strtab. * Add preliminary support for `-z combreloc'-style startup optimization on i386, `#ifdef COMBRELOC'.
|
#
1.3 |
|
05-Sep-2002 |
mycroft |
Rename _rtld_relocate_nonplt_object() to _rtld_relocate_nonplt_objects(), and push the outer loop into it. This actually shaves a couple % off startup time at least on PCs.
|
#
1.2 |
|
05-Sep-2002 |
mycroft |
Split _rtld_relocate_nonplt_object() into separate MD files.
|
#
1.1 |
|
05-Sep-2002 |
mycroft |
Make _rtld_setup_pltgot() a consistent interface on all platforms.
|
#
1.32 |
|
19-Jun-2017 |
joerg |
Replace COMBREL with just-in-time check in _rtld_relocate_nonplt_objects.
The COMBREL logic predates thread-safety of the dynamic linker and breaks the use of shared locks for the common symbol lookup case. It is unlikely to provide any benefit for lazy binding or PLT lookups, so provide equivalent functionality in the non-PLT relocation handling loop by checking if the symbol used by the current relocation is the same as the one used during the last lookup. No inter-object cachine is done as it is also unlikely to be benefical.
Testing with Firefox startup on AMD64 shows a small performance gain by the new method.
|
Revision tags: netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 pgoyette-localcount-20170320 bouyer-socketcan-base pgoyette-localcount-20170107 pgoyette-localcount-20161104 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base
|
#
1.31 |
|
14-Apr-2016 |
skrll |
Remove duplicated __RCSIDs I added years ago - I blame CVS.
Spotted by Miod Vallat
|
#
1.30 |
|
25-Aug-2014 |
joerg |
Add basic support for indirect functions. It allows providing a public function symbol with an implementation choosen at run time. Refactor calls to functions by address in ld.elf_so to create temporary function descriptors on the stack, if the address is not leaked outside.
Limitations: - no support for initialising static storage with function pointers - no support for unnamed resolver functions
Inspired by FreeBSD's r228435 by kib@freebsd.org.
|
Revision tags: netbsd-7-0-2-RELEASE netbsd-7-0-1-RELEASE netbsd-7-0-RELEASE netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 tls-maxphys-base
|
#
1.29 |
|
21-Mar-2014 |
matt |
branches: 1.29.4; Improve some of the rdbg messages to print the address of the pltgot slot being modified.
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE yamt-pagecache-tag8 netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE riastradh-drm2-base3 netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 yamt-pagecache-base5 yamt-pagecache-base4 netbsd-6-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base cherry-xenmp-base
|
#
1.28 |
|
25-Mar-2011 |
joerg |
branches: 1.28.4; 1.28.10; Add basic locking to ld.elf_so.
|
Revision tags: bouyer-quota2-nbase bouyer-quota2-base matt-mips64-premerge-20101231
|
#
1.27 |
|
06-Aug-2010 |
joerg |
Reduce header pollution for mdreloc.c. Make Obj_Entry argument of _rtld_relocate_nonplt_objects non-const in preparation for TLS support.
|
#
1.26 |
|
13-Jan-2010 |
christos |
PR/39240: Satoshi Suetake: Don't fail when attempting to resolve weak symbols when we are doing immediate binding, leave them alone and they will be dealt with later during lazy binding. From skrll@
|
Revision tags: matt-premerge-20091211
|
#
1.25 |
|
29-Aug-2009 |
jmmv |
Remove trailing \n in calls to _rtld_error: a newline is automatically added by a call to the function.
|
Revision tags: jym-xensuspend-nbase jym-xensuspend-base
|
#
1.24 |
|
16-Mar-2009 |
lukem |
Fix const issues (cast const pointers to "const uint8_t *" instead of "caddr_t")
NOTE: change based on ../i386/mdreloc.c 1.27 XXX: not compile tested
|
Revision tags: netbsd-5-1-5-RELEASE netbsd-5-1-4-RELEASE netbsd-5-1-3-RELEASE netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 netbsd-5-base matt-mips64-base2 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2
|
#
1.23 |
|
24-Jul-2008 |
skrll |
branches: 1.23.4; 1.23.6; RCSID police
|
#
1.22 |
|
24-Jul-2008 |
matt |
Refactor common code to _rtld_relocate_plt_object to i386 and arm so they act like the other versions. In _rtld_bind, if the result is 0, call _rtld_die. Initialize _rtld_sym_zero.st_value to -_rtld_objself.maprelocbase. Now when the symbol is resolved, st_value + maprelocbase will equal 0 and the above check in _rtld_bind will fire and a call to NULL will be avoided.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-revivesa-base-1 yamt-pf42-base4 yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 wrstuden-revivesa-base yamt-pf42-base keiichi-mipv6-base matt-armv6-nbase matt-armv6-prevmlocking wrstuden-fixsa-base-1 netbsd-4-0-RELEASE cube-autoconf-base netbsd-4-0-RC5 netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 matt-armv6-base matt-mips64-base hpcarm-cleanup-base wrstuden-fixsa-base abandoned-netbsd-4-base netbsd-4-base
|
#
1.21 |
|
21-May-2006 |
mrg |
branches: 1.21.20; avoid more GCC4 uninitialised variable problems. (sh3 known, vax guessed.)
|
#
1.20 |
|
20-Aug-2005 |
skrll |
Add __RCSID.
|
#
1.19 |
|
15-Aug-2005 |
skrll |
KNF
|
#
1.18 |
|
24-Jul-2005 |
skrll |
Support immediate PLT binding on vax. Tested on simh.
Nearly there...
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 netbsd-2-0-3-RELEASE netbsd-2-1-RELEASE netbsd-2-1-RC6 netbsd-2-1-RC5 netbsd-2-1-RC4 netbsd-2-1-RC3 netbsd-2-1-RC2 netbsd-2-1-RC1 netbsd-2-0-2-RELEASE netbsd-3-base netbsd-2-0-1-RELEASE netbsd-2-base netbsd-2-0-RELEASE netbsd-2-0-RC5 netbsd-2-0-RC4 netbsd-2-0-RC3 netbsd-2-0-RC2 netbsd-2-0-RC1 netbsd-2-0-base
|
#
1.17 |
|
24-Jul-2003 |
skrll |
branches: 1.17.4; ANSIfy and de-__P().
|
Revision tags: fvdl_fs64_base
|
#
1.16 |
|
03-Oct-2002 |
mycroft |
Skip the lazy PLT relocation if relocbase==0 (useful if libraries are loaded at their VMA address).
|
#
1.15 |
|
26-Sep-2002 |
mycroft |
Implement a self-relocate function for the VAX.
|
#
1.14 |
|
26-Sep-2002 |
mycroft |
Remove the `self' args to _rtld_relocate_objects() and _rtld_relocate_nonplt_objects().
|
#
1.13 |
|
25-Sep-2002 |
mycroft |
Push the _rtld_bind() interface into MD code -- it's just a trivial wrapper anyway.
|
#
1.12 |
|
12-Sep-2002 |
mycroft |
Nuke -DRTLD_RELOCATE_SELF and `dodebug' from orbit.
|
#
1.11 |
|
12-Sep-2002 |
mycroft |
_rtld_bind_start() is not used in MI code, so declare it in the MD code.
|
#
1.10 |
|
11-Sep-2002 |
junyoung |
Add $NetBSD$.
|
#
1.9 |
|
06-Sep-2002 |
mycroft |
Pass down an additional flag to _rtld_relocate_nonplt_objects() which indicates whether we're relocating ld.elf_so itself. Use this in some places rather than hackish tests on `dodebug'. (The Alpha and HPPA `dodebug' tests were actually noops, because RTLD_RELOCATE_SELF is not set, and therefore dodebug is always true.)
|
#
1.8 |
|
06-Sep-2002 |
mycroft |
Introduce a new flag, `isdynamic', which is used to remember whether the executable was of type ET_DYN. Use this instead of `mainprog' to determine whether we need to do base-relative fixups of the PLT. (This allows loading non-relocatable objects, should we desire to do that at some point...)
|
#
1.7 |
|
06-Sep-2002 |
mycroft |
Re-poison a lot of consts, now that the mark shite is gone.
|
#
1.6 |
|
06-Sep-2002 |
mycroft |
Split _rtld_relocate_plt_object() into two MD functions: * _rtld_relocate_plt_lazy() fixes up all the relocs pointing to the PLT. (On most platforms it just does a simple base-relative fixup; on SPARC it does nothing.) * _rtld_relocate_plt_object() does immediate binding for a PLT entry. The basic gist is that this saves a bit of time on SPARC (where the iteration through the pltrela table was gratuitous), and a little less time on all other platforms. A whole lot of #ifdef'ed crap is moved out of reloc.c, too.
NOT tested on: hppa sh x86_64
|
#
1.5 |
|
05-Sep-2002 |
mycroft |
Partially fix up some debug printf()s that don't need to use defobj.
|
#
1.4 |
|
05-Sep-2002 |
mycroft |
A few things: * Pass a symbol number to _rtld_find_symdef(), not a r_info. * Don't try to do a symbol lookup when we find an unsupported relocation; instead get the symbol name from the referencing object's strtab. * Add preliminary support for `-z combreloc'-style startup optimization on i386, `#ifdef COMBRELOC'.
|
#
1.3 |
|
05-Sep-2002 |
mycroft |
Rename _rtld_relocate_nonplt_object() to _rtld_relocate_nonplt_objects(), and push the outer loop into it. This actually shaves a couple % off startup time at least on PCs.
|
#
1.2 |
|
05-Sep-2002 |
mycroft |
Split _rtld_relocate_nonplt_object() into separate MD files.
|
#
1.1 |
|
05-Sep-2002 |
mycroft |
Make _rtld_setup_pltgot() a consistent interface on all platforms.
|
Revision tags: pgoyette-localcount-20161104 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base
|
#
1.31 |
|
14-Apr-2016 |
skrll |
Remove duplicated __RCSIDs I added years ago - I blame CVS.
Spotted by Miod Vallat
|
#
1.30 |
|
25-Aug-2014 |
joerg |
Add basic support for indirect functions. It allows providing a public function symbol with an implementation choosen at run time. Refactor calls to functions by address in ld.elf_so to create temporary function descriptors on the stack, if the address is not leaked outside.
Limitations: - no support for initialising static storage with function pointers - no support for unnamed resolver functions
Inspired by FreeBSD's r228435 by kib@freebsd.org.
|
Revision tags: netbsd-7-0-2-RELEASE netbsd-7-0-1-RELEASE netbsd-7-0-RELEASE netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 tls-maxphys-base
|
#
1.29 |
|
21-Mar-2014 |
matt |
branches: 1.29.4; Improve some of the rdbg messages to print the address of the pltgot slot being modified.
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE yamt-pagecache-tag8 netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE riastradh-drm2-base3 netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 yamt-pagecache-base5 yamt-pagecache-base4 netbsd-6-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base cherry-xenmp-base
|
#
1.28 |
|
25-Mar-2011 |
joerg |
branches: 1.28.4; 1.28.10; Add basic locking to ld.elf_so.
|
Revision tags: bouyer-quota2-nbase bouyer-quota2-base matt-mips64-premerge-20101231
|
#
1.27 |
|
06-Aug-2010 |
joerg |
Reduce header pollution for mdreloc.c. Make Obj_Entry argument of _rtld_relocate_nonplt_objects non-const in preparation for TLS support.
|
#
1.26 |
|
13-Jan-2010 |
christos |
PR/39240: Satoshi Suetake: Don't fail when attempting to resolve weak symbols when we are doing immediate binding, leave them alone and they will be dealt with later during lazy binding. From skrll@
|
Revision tags: matt-premerge-20091211
|
#
1.25 |
|
29-Aug-2009 |
jmmv |
Remove trailing \n in calls to _rtld_error: a newline is automatically added by a call to the function.
|
Revision tags: jym-xensuspend-nbase jym-xensuspend-base
|
#
1.24 |
|
16-Mar-2009 |
lukem |
Fix const issues (cast const pointers to "const uint8_t *" instead of "caddr_t")
NOTE: change based on ../i386/mdreloc.c 1.27 XXX: not compile tested
|
Revision tags: netbsd-5-1-5-RELEASE netbsd-5-1-4-RELEASE netbsd-5-1-3-RELEASE netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 netbsd-5-base matt-mips64-base2 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2
|
#
1.23 |
|
24-Jul-2008 |
skrll |
branches: 1.23.4; 1.23.6; RCSID police
|
#
1.22 |
|
24-Jul-2008 |
matt |
Refactor common code to _rtld_relocate_plt_object to i386 and arm so they act like the other versions. In _rtld_bind, if the result is 0, call _rtld_die. Initialize _rtld_sym_zero.st_value to -_rtld_objself.maprelocbase. Now when the symbol is resolved, st_value + maprelocbase will equal 0 and the above check in _rtld_bind will fire and a call to NULL will be avoided.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-revivesa-base-1 yamt-pf42-base4 yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 wrstuden-revivesa-base yamt-pf42-base keiichi-mipv6-base matt-armv6-nbase matt-armv6-prevmlocking wrstuden-fixsa-base-1 netbsd-4-0-RELEASE cube-autoconf-base netbsd-4-0-RC5 netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 matt-armv6-base matt-mips64-base hpcarm-cleanup-base wrstuden-fixsa-base abandoned-netbsd-4-base netbsd-4-base
|
#
1.21 |
|
21-May-2006 |
mrg |
branches: 1.21.20; avoid more GCC4 uninitialised variable problems. (sh3 known, vax guessed.)
|
#
1.20 |
|
20-Aug-2005 |
skrll |
Add __RCSID.
|
#
1.19 |
|
15-Aug-2005 |
skrll |
KNF
|
#
1.18 |
|
24-Jul-2005 |
skrll |
Support immediate PLT binding on vax. Tested on simh.
Nearly there...
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 netbsd-2-0-3-RELEASE netbsd-2-1-RELEASE netbsd-2-1-RC6 netbsd-2-1-RC5 netbsd-2-1-RC4 netbsd-2-1-RC3 netbsd-2-1-RC2 netbsd-2-1-RC1 netbsd-2-0-2-RELEASE netbsd-3-base netbsd-2-0-1-RELEASE netbsd-2-base netbsd-2-0-RELEASE netbsd-2-0-RC5 netbsd-2-0-RC4 netbsd-2-0-RC3 netbsd-2-0-RC2 netbsd-2-0-RC1 netbsd-2-0-base
|
#
1.17 |
|
24-Jul-2003 |
skrll |
branches: 1.17.4; ANSIfy and de-__P().
|
Revision tags: fvdl_fs64_base
|
#
1.16 |
|
03-Oct-2002 |
mycroft |
Skip the lazy PLT relocation if relocbase==0 (useful if libraries are loaded at their VMA address).
|
#
1.15 |
|
26-Sep-2002 |
mycroft |
Implement a self-relocate function for the VAX.
|
#
1.14 |
|
26-Sep-2002 |
mycroft |
Remove the `self' args to _rtld_relocate_objects() and _rtld_relocate_nonplt_objects().
|
#
1.13 |
|
25-Sep-2002 |
mycroft |
Push the _rtld_bind() interface into MD code -- it's just a trivial wrapper anyway.
|
#
1.12 |
|
12-Sep-2002 |
mycroft |
Nuke -DRTLD_RELOCATE_SELF and `dodebug' from orbit.
|
#
1.11 |
|
12-Sep-2002 |
mycroft |
_rtld_bind_start() is not used in MI code, so declare it in the MD code.
|
#
1.10 |
|
11-Sep-2002 |
junyoung |
Add $NetBSD$.
|
#
1.9 |
|
06-Sep-2002 |
mycroft |
Pass down an additional flag to _rtld_relocate_nonplt_objects() which indicates whether we're relocating ld.elf_so itself. Use this in some places rather than hackish tests on `dodebug'. (The Alpha and HPPA `dodebug' tests were actually noops, because RTLD_RELOCATE_SELF is not set, and therefore dodebug is always true.)
|
#
1.8 |
|
06-Sep-2002 |
mycroft |
Introduce a new flag, `isdynamic', which is used to remember whether the executable was of type ET_DYN. Use this instead of `mainprog' to determine whether we need to do base-relative fixups of the PLT. (This allows loading non-relocatable objects, should we desire to do that at some point...)
|
#
1.7 |
|
06-Sep-2002 |
mycroft |
Re-poison a lot of consts, now that the mark shite is gone.
|
#
1.6 |
|
06-Sep-2002 |
mycroft |
Split _rtld_relocate_plt_object() into two MD functions: * _rtld_relocate_plt_lazy() fixes up all the relocs pointing to the PLT. (On most platforms it just does a simple base-relative fixup; on SPARC it does nothing.) * _rtld_relocate_plt_object() does immediate binding for a PLT entry. The basic gist is that this saves a bit of time on SPARC (where the iteration through the pltrela table was gratuitous), and a little less time on all other platforms. A whole lot of #ifdef'ed crap is moved out of reloc.c, too.
NOT tested on: hppa sh x86_64
|
#
1.5 |
|
05-Sep-2002 |
mycroft |
Partially fix up some debug printf()s that don't need to use defobj.
|
#
1.4 |
|
05-Sep-2002 |
mycroft |
A few things: * Pass a symbol number to _rtld_find_symdef(), not a r_info. * Don't try to do a symbol lookup when we find an unsupported relocation; instead get the symbol name from the referencing object's strtab. * Add preliminary support for `-z combreloc'-style startup optimization on i386, `#ifdef COMBRELOC'.
|
#
1.3 |
|
05-Sep-2002 |
mycroft |
Rename _rtld_relocate_nonplt_object() to _rtld_relocate_nonplt_objects(), and push the outer loop into it. This actually shaves a couple % off startup time at least on PCs.
|
#
1.2 |
|
05-Sep-2002 |
mycroft |
Split _rtld_relocate_nonplt_object() into separate MD files.
|
#
1.1 |
|
05-Sep-2002 |
mycroft |
Make _rtld_setup_pltgot() a consistent interface on all platforms.
|