#
1.36 |
|
29-Jan-2023 |
gnezdo |
Unite all nitems copies in ld.so/util.h
OK deraadt
|
Revision tags: OPENBSD_7_2_BASE
|
#
1.35 |
|
05-Sep-2022 |
miod |
Do not perform out-of-bounds arrray accesses for bogus relocation type values.
|
Revision tags: OPENBSD_7_1_BASE
|
#
1.34 |
|
08-Jan-2022 |
guenther |
Prep .c files for removing the #includes from */archdep.h * replace #include "archdep.h" with #includes of what is used, pulling in "syscall.h", "util.h", and "archdep.h" as needed * delete #include <sys/syscall.h> from syscall.h * only pull in <sys/stat.h> to the three files that use _dl_fstat(), forward declare struct stat in syscall.h for the others * NBBY is for <sys/select.h> macros; just use '8' in dl_printf.c * <machine/vmparam.h> is only needed on i386; conditionalize it * stop using __LDPGSZ: use _MAX_PAGE_SHIFT (already used by malloc.c) where necessary * delete other bogus #includes, order legit per style: <sys/*> then <*/*>, then <*>, then "*"
dir.c improvement from jsg@ ok and testing assistance deraadt@
|
Revision tags: OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE OPENBSD_7_0_BASE
|
#
1.33 |
|
07-Dec-2019 |
guenther |
Disable ltrace for objects linked with -znow, as at least on amd64, linking that was deletes the lazy relocation trampoline which ltrace currently depends on
problem reported by tb@ directional feedback kettenis@ ok mpi@
|
#
1.32 |
|
24-Oct-2019 |
guenther |
Delete unused support for relocations that don't require alignment.
ok mpi@ kettenis@
|
#
1.31 |
|
23-Oct-2019 |
guenther |
Prefer the size-independent ELF identifiers over the size-specific ones. Strip superfluous parens from return statements while here.
Done programatically with two perl invocations
idea ok kettenis@ drahn@ ok visa@
|
Revision tags: OPENBSD_6_6_BASE
|
#
1.30 |
|
05-Oct-2019 |
guenther |
Delete some obsolete debugging #ifdefs blocks
ok mlarkin@, mpi@, krw@, deraadt@
|
#
1.29 |
|
06-Aug-2019 |
guenther |
Factor out TEXTREL mprotecting from the per-arch files into _dl_rtld(), hiding the actual grotty bits in inline functions
ok mpi@
|
#
1.28 |
|
04-Aug-2019 |
guenther |
Simplify _dl_find_symbol(). Currently, it returns three values: - the symbol it found, returned via the second argument - the base offset of the the object it was found in, via the return value - optionally: the object it was found in, returned via the last argument
Instead, return a struct with the symbol and object pointers and let the caller get the base offset from the object's obj_base member. On at least aarch64, amd64, mips64, powerpc, and sparc64, a two word struct like this is passed in registers.
ok mpi@, kettenis@
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.27 |
|
16-Nov-2018 |
guenther |
Finish ld.so's transition to GNU_RELRO: eliminate support for using __got_{start,end} to find a region to mark read-only. It was only used for binaries that didn't have a GNU_RELRO segment, but all archs have been using that for over a year. Since support for insecure-PLT layouts on powerpc and alpha have been removed, all archs handle GNU_RELRO the same way and the support can be moved from the MD code to the MI code.
ok mpi@
|
#
1.26 |
|
25-Oct-2018 |
guenther |
The compilers already put static arrays in .rodata when not written to; marking them const will keep a source change from silently moving them back to .data
ok deraadt@ kettenis@
|
Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.25 |
|
24-Jan-2017 |
guenther |
On fatal errors, kill ourselves with thrkill(0,9,NULL) instead of simply exiting, via helper functions _dl_die(), _dl_diedie(), and _dl_oom().
prompted by a complaint from jsing@ ok jsing@ deraadt@
|
Revision tags: OPENBSD_6_0_BASE
|
#
1.24 |
|
21-Jun-2016 |
deraadt |
When handling DT_TEXTREL only set the mapping to READ+WRITE, ignore possible EXEC permission for the section, because the proper permission is set late, and there are no thread concerns here. Avoids W^X issues in oddball cases. ok guenther kettenis
|
Revision tags: OPENBSD_5_9_BASE
|
#
1.23 |
|
02-Nov-2015 |
guenther |
Factor out the logic for mprotecting the memory between two symbols into a new MI routine _dl_protect_segment(), and use that for protecting the GOT and--on some archs--the PLT.
Amazing testing turnaround by miod@, who apparently violated relativity to get back results on some archs as fast as he did
|
#
1.22 |
|
02-Nov-2015 |
guenther |
Fix typo: s/DT_JUMPREL/DT_JMPREL/
|
#
1.21 |
|
28-Aug-2015 |
guenther |
Use kbind for lazy binding GOT/PLT updates on sh (i.e. landisk)
Much discussion with and assistance from miod and deraadt ok deraadt@
|
Revision tags: OPENBSD_5_4_BASE OPENBSD_5_5_BASE OPENBSD_5_6_BASE OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.20 |
|
13-Jun-2013 |
brad |
Appease LLVM warning..
error: indirection of non-volatile null pointer will be deleted, not trap [-Werror,-Wnull-dereference]
Suggestion from matthew@ Ok matthew@ miod@
|
#
1.19 |
|
01-Jun-2013 |
miod |
Introduce ltrace(1). This tool works with ld.so to inject utrace record for each plt call, allowing to trace a binary linked against shared library at the public function call level.
To do so, ltrace(1) sets up some environment variables to enable plt tracing in ld.so, and invokes ktrace(2) for utrace events. ld.so will force lazy binding and will send an utrace record in the plt resolver, without updating the plt.
Minimal filtering capabilities are provided, inspired by Solaris' truss -u, to limit tracing to libraries and/or symbol names. Non-traced libraries and symbols will have the regular resolver processing, with the expected plt update.
"Get it in" deraadt
|
#
1.18 |
|
08-May-2013 |
guenther |
Implement symbol caching and RELACOUNT/RELCOUNT optimizations. Much assistance and testing by miod
ok miod@
|
#
1.17 |
|
29-Mar-2013 |
miod |
Enable lazy binding by default.
|
#
1.16 |
|
26-Mar-2013 |
miod |
SH is a RelA architecture, not a Rel one. Fix _dl_bind() and lazy gotplt relocation to correctly process RelA entries. This allows lazy binding to work so far; not enabled yet, must survive some serious churning first.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.15 |
|
06-Apr-2011 |
miod |
Avoid using NULL in non-pointer contexts: use 0 for integer values and '\0' for chars.
|
Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
|
#
1.14 |
|
02-May-2010 |
guenther |
Combine the signal mask handling into _dl_thread_bind_lock(), as it's MI.
ok drahn@
|
Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
|
#
1.13 |
|
24-Jul-2008 |
guenther |
release the bind lock before resetting the signal mask
ok kurt@
|
#
1.12 |
|
27-Jun-2008 |
miod |
Remove again the old _dl_md_reloc() calls-through-plt workaround: it is no longer necessary now that libgcc is built correctly, and it caused the elfbug regress test to fail.
|
#
1.11 |
|
09-Apr-2008 |
kurt |
Improve support for shared libs linked at non-zero addreses: - rename private values in struct elf_object to better describe their meaning: s/load_offs/obj_base/ "object's address '0' base" s/load_addr/load_base/ "The base address of the loadable segments" - gdb needs the obj_base value so swap positions with load_base in struct elf_object - fix a few occurrences of where load_base was used instead of obj_base.
With help and okay drahn@
|
Revision tags: OPENBSD_4_3_BASE
|
#
1.10 |
|
24-Feb-2008 |
drahn |
Use rounded down address when changing memory protections on the GOT, such that we don't accidentally touch the page after the GOT.
Bug found on sparc64 affected other platforms as well.
ok kettenis@
|
#
1.9 |
|
27-Nov-2007 |
miod |
Make _dl_md_reloc_got() report errors, and take them into account. Fixes PR #5579.
|
Revision tags: OPENBSD_4_2_BASE
|
#
1.8 |
|
05-May-2007 |
drahn |
Provide hook so that rthreads can provide a spinlock to protect from races in lazy binding. ok art@, kurt@
|
Revision tags: OPENBSD_4_1_BASE
|
#
1.7 |
|
07-Mar-2007 |
drahn |
Put the workaround back in because gcc fails to build otherwise. ok deraadt@
|
#
1.6 |
|
06-Mar-2007 |
drahn |
Revert a workaround that was put in for softfpu ABI violations, hardfp doesnt. ok miod.
|
#
1.5 |
|
03-Feb-2007 |
drahn |
Kludge around a horrible problem where gcc 'knows' that __udivsi3 will only clobber r0 and r4, and will not modify any other registers. Unfortunately calling thru the PLT clobbers other registers eg, r1, which then breaks because gcc doesn't reload the proper value.
|
#
1.4 |
|
11-Nov-2006 |
drahn |
remove '#if 0' block.
|
#
1.3 |
|
10-Nov-2006 |
drahn |
better...
|
#
1.2 |
|
10-Nov-2006 |
drahn |
Getting much closer.
|
#
1.1 |
|
10-Nov-2006 |
drahn |
Not quite working ld.so support for sh
|
#
1.35 |
|
05-Sep-2022 |
miod |
Do not perform out-of-bounds arrray accesses for bogus relocation type values.
|
Revision tags: OPENBSD_7_1_BASE
|
#
1.34 |
|
08-Jan-2022 |
guenther |
Prep .c files for removing the #includes from */archdep.h * replace #include "archdep.h" with #includes of what is used, pulling in "syscall.h", "util.h", and "archdep.h" as needed * delete #include <sys/syscall.h> from syscall.h * only pull in <sys/stat.h> to the three files that use _dl_fstat(), forward declare struct stat in syscall.h for the others * NBBY is for <sys/select.h> macros; just use '8' in dl_printf.c * <machine/vmparam.h> is only needed on i386; conditionalize it * stop using __LDPGSZ: use _MAX_PAGE_SHIFT (already used by malloc.c) where necessary * delete other bogus #includes, order legit per style: <sys/*> then <*/*>, then <*>, then "*"
dir.c improvement from jsg@ ok and testing assistance deraadt@
|
Revision tags: OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE OPENBSD_7_0_BASE
|
#
1.33 |
|
07-Dec-2019 |
guenther |
Disable ltrace for objects linked with -znow, as at least on amd64, linking that was deletes the lazy relocation trampoline which ltrace currently depends on
problem reported by tb@ directional feedback kettenis@ ok mpi@
|
#
1.32 |
|
24-Oct-2019 |
guenther |
Delete unused support for relocations that don't require alignment.
ok mpi@ kettenis@
|
#
1.31 |
|
23-Oct-2019 |
guenther |
Prefer the size-independent ELF identifiers over the size-specific ones. Strip superfluous parens from return statements while here.
Done programatically with two perl invocations
idea ok kettenis@ drahn@ ok visa@
|
Revision tags: OPENBSD_6_6_BASE
|
#
1.30 |
|
05-Oct-2019 |
guenther |
Delete some obsolete debugging #ifdefs blocks
ok mlarkin@, mpi@, krw@, deraadt@
|
#
1.29 |
|
06-Aug-2019 |
guenther |
Factor out TEXTREL mprotecting from the per-arch files into _dl_rtld(), hiding the actual grotty bits in inline functions
ok mpi@
|
#
1.28 |
|
04-Aug-2019 |
guenther |
Simplify _dl_find_symbol(). Currently, it returns three values: - the symbol it found, returned via the second argument - the base offset of the the object it was found in, via the return value - optionally: the object it was found in, returned via the last argument
Instead, return a struct with the symbol and object pointers and let the caller get the base offset from the object's obj_base member. On at least aarch64, amd64, mips64, powerpc, and sparc64, a two word struct like this is passed in registers.
ok mpi@, kettenis@
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.27 |
|
16-Nov-2018 |
guenther |
Finish ld.so's transition to GNU_RELRO: eliminate support for using __got_{start,end} to find a region to mark read-only. It was only used for binaries that didn't have a GNU_RELRO segment, but all archs have been using that for over a year. Since support for insecure-PLT layouts on powerpc and alpha have been removed, all archs handle GNU_RELRO the same way and the support can be moved from the MD code to the MI code.
ok mpi@
|
#
1.26 |
|
25-Oct-2018 |
guenther |
The compilers already put static arrays in .rodata when not written to; marking them const will keep a source change from silently moving them back to .data
ok deraadt@ kettenis@
|
Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.25 |
|
24-Jan-2017 |
guenther |
On fatal errors, kill ourselves with thrkill(0,9,NULL) instead of simply exiting, via helper functions _dl_die(), _dl_diedie(), and _dl_oom().
prompted by a complaint from jsing@ ok jsing@ deraadt@
|
Revision tags: OPENBSD_6_0_BASE
|
#
1.24 |
|
21-Jun-2016 |
deraadt |
When handling DT_TEXTREL only set the mapping to READ+WRITE, ignore possible EXEC permission for the section, because the proper permission is set late, and there are no thread concerns here. Avoids W^X issues in oddball cases. ok guenther kettenis
|
Revision tags: OPENBSD_5_9_BASE
|
#
1.23 |
|
02-Nov-2015 |
guenther |
Factor out the logic for mprotecting the memory between two symbols into a new MI routine _dl_protect_segment(), and use that for protecting the GOT and--on some archs--the PLT.
Amazing testing turnaround by miod@, who apparently violated relativity to get back results on some archs as fast as he did
|
#
1.22 |
|
02-Nov-2015 |
guenther |
Fix typo: s/DT_JUMPREL/DT_JMPREL/
|
#
1.21 |
|
28-Aug-2015 |
guenther |
Use kbind for lazy binding GOT/PLT updates on sh (i.e. landisk)
Much discussion with and assistance from miod and deraadt ok deraadt@
|
Revision tags: OPENBSD_5_4_BASE OPENBSD_5_5_BASE OPENBSD_5_6_BASE OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.20 |
|
13-Jun-2013 |
brad |
Appease LLVM warning..
error: indirection of non-volatile null pointer will be deleted, not trap [-Werror,-Wnull-dereference]
Suggestion from matthew@ Ok matthew@ miod@
|
#
1.19 |
|
01-Jun-2013 |
miod |
Introduce ltrace(1). This tool works with ld.so to inject utrace record for each plt call, allowing to trace a binary linked against shared library at the public function call level.
To do so, ltrace(1) sets up some environment variables to enable plt tracing in ld.so, and invokes ktrace(2) for utrace events. ld.so will force lazy binding and will send an utrace record in the plt resolver, without updating the plt.
Minimal filtering capabilities are provided, inspired by Solaris' truss -u, to limit tracing to libraries and/or symbol names. Non-traced libraries and symbols will have the regular resolver processing, with the expected plt update.
"Get it in" deraadt
|
#
1.18 |
|
08-May-2013 |
guenther |
Implement symbol caching and RELACOUNT/RELCOUNT optimizations. Much assistance and testing by miod
ok miod@
|
#
1.17 |
|
29-Mar-2013 |
miod |
Enable lazy binding by default.
|
#
1.16 |
|
26-Mar-2013 |
miod |
SH is a RelA architecture, not a Rel one. Fix _dl_bind() and lazy gotplt relocation to correctly process RelA entries. This allows lazy binding to work so far; not enabled yet, must survive some serious churning first.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.15 |
|
06-Apr-2011 |
miod |
Avoid using NULL in non-pointer contexts: use 0 for integer values and '\0' for chars.
|
Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
|
#
1.14 |
|
02-May-2010 |
guenther |
Combine the signal mask handling into _dl_thread_bind_lock(), as it's MI.
ok drahn@
|
Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
|
#
1.13 |
|
24-Jul-2008 |
guenther |
release the bind lock before resetting the signal mask
ok kurt@
|
#
1.12 |
|
27-Jun-2008 |
miod |
Remove again the old _dl_md_reloc() calls-through-plt workaround: it is no longer necessary now that libgcc is built correctly, and it caused the elfbug regress test to fail.
|
#
1.11 |
|
09-Apr-2008 |
kurt |
Improve support for shared libs linked at non-zero addreses: - rename private values in struct elf_object to better describe their meaning: s/load_offs/obj_base/ "object's address '0' base" s/load_addr/load_base/ "The base address of the loadable segments" - gdb needs the obj_base value so swap positions with load_base in struct elf_object - fix a few occurrences of where load_base was used instead of obj_base.
With help and okay drahn@
|
Revision tags: OPENBSD_4_3_BASE
|
#
1.10 |
|
24-Feb-2008 |
drahn |
Use rounded down address when changing memory protections on the GOT, such that we don't accidentally touch the page after the GOT.
Bug found on sparc64 affected other platforms as well.
ok kettenis@
|
#
1.9 |
|
27-Nov-2007 |
miod |
Make _dl_md_reloc_got() report errors, and take them into account. Fixes PR #5579.
|
Revision tags: OPENBSD_4_2_BASE
|
#
1.8 |
|
05-May-2007 |
drahn |
Provide hook so that rthreads can provide a spinlock to protect from races in lazy binding. ok art@, kurt@
|
Revision tags: OPENBSD_4_1_BASE
|
#
1.7 |
|
07-Mar-2007 |
drahn |
Put the workaround back in because gcc fails to build otherwise. ok deraadt@
|
#
1.6 |
|
06-Mar-2007 |
drahn |
Revert a workaround that was put in for softfpu ABI violations, hardfp doesnt. ok miod.
|
#
1.5 |
|
03-Feb-2007 |
drahn |
Kludge around a horrible problem where gcc 'knows' that __udivsi3 will only clobber r0 and r4, and will not modify any other registers. Unfortunately calling thru the PLT clobbers other registers eg, r1, which then breaks because gcc doesn't reload the proper value.
|
#
1.4 |
|
11-Nov-2006 |
drahn |
remove '#if 0' block.
|
#
1.3 |
|
10-Nov-2006 |
drahn |
better...
|
#
1.2 |
|
10-Nov-2006 |
drahn |
Getting much closer.
|
#
1.1 |
|
10-Nov-2006 |
drahn |
Not quite working ld.so support for sh
|
#
1.34 |
|
08-Jan-2022 |
guenther |
Prep .c files for removing the #includes from */archdep.h * replace #include "archdep.h" with #includes of what is used, pulling in "syscall.h", "util.h", and "archdep.h" as needed * delete #include <sys/syscall.h> from syscall.h * only pull in <sys/stat.h> to the three files that use _dl_fstat(), forward declare struct stat in syscall.h for the others * NBBY is for <sys/select.h> macros; just use '8' in dl_printf.c * <machine/vmparam.h> is only needed on i386; conditionalize it * stop using __LDPGSZ: use _MAX_PAGE_SHIFT (already used by malloc.c) where necessary * delete other bogus #includes, order legit per style: <sys/*> then <*/*>, then <*>, then "*"
dir.c improvement from jsg@ ok and testing assistance deraadt@
|
Revision tags: OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE OPENBSD_7_0_BASE
|
#
1.33 |
|
07-Dec-2019 |
guenther |
Disable ltrace for objects linked with -znow, as at least on amd64, linking that was deletes the lazy relocation trampoline which ltrace currently depends on
problem reported by tb@ directional feedback kettenis@ ok mpi@
|
#
1.32 |
|
24-Oct-2019 |
guenther |
Delete unused support for relocations that don't require alignment.
ok mpi@ kettenis@
|
#
1.31 |
|
23-Oct-2019 |
guenther |
Prefer the size-independent ELF identifiers over the size-specific ones. Strip superfluous parens from return statements while here.
Done programatically with two perl invocations
idea ok kettenis@ drahn@ ok visa@
|
Revision tags: OPENBSD_6_6_BASE
|
#
1.30 |
|
05-Oct-2019 |
guenther |
Delete some obsolete debugging #ifdefs blocks
ok mlarkin@, mpi@, krw@, deraadt@
|
#
1.29 |
|
06-Aug-2019 |
guenther |
Factor out TEXTREL mprotecting from the per-arch files into _dl_rtld(), hiding the actual grotty bits in inline functions
ok mpi@
|
#
1.28 |
|
04-Aug-2019 |
guenther |
Simplify _dl_find_symbol(). Currently, it returns three values: - the symbol it found, returned via the second argument - the base offset of the the object it was found in, via the return value - optionally: the object it was found in, returned via the last argument
Instead, return a struct with the symbol and object pointers and let the caller get the base offset from the object's obj_base member. On at least aarch64, amd64, mips64, powerpc, and sparc64, a two word struct like this is passed in registers.
ok mpi@, kettenis@
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.27 |
|
16-Nov-2018 |
guenther |
Finish ld.so's transition to GNU_RELRO: eliminate support for using __got_{start,end} to find a region to mark read-only. It was only used for binaries that didn't have a GNU_RELRO segment, but all archs have been using that for over a year. Since support for insecure-PLT layouts on powerpc and alpha have been removed, all archs handle GNU_RELRO the same way and the support can be moved from the MD code to the MI code.
ok mpi@
|
#
1.26 |
|
25-Oct-2018 |
guenther |
The compilers already put static arrays in .rodata when not written to; marking them const will keep a source change from silently moving them back to .data
ok deraadt@ kettenis@
|
Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.25 |
|
24-Jan-2017 |
guenther |
On fatal errors, kill ourselves with thrkill(0,9,NULL) instead of simply exiting, via helper functions _dl_die(), _dl_diedie(), and _dl_oom().
prompted by a complaint from jsing@ ok jsing@ deraadt@
|
Revision tags: OPENBSD_6_0_BASE
|
#
1.24 |
|
21-Jun-2016 |
deraadt |
When handling DT_TEXTREL only set the mapping to READ+WRITE, ignore possible EXEC permission for the section, because the proper permission is set late, and there are no thread concerns here. Avoids W^X issues in oddball cases. ok guenther kettenis
|
Revision tags: OPENBSD_5_9_BASE
|
#
1.23 |
|
02-Nov-2015 |
guenther |
Factor out the logic for mprotecting the memory between two symbols into a new MI routine _dl_protect_segment(), and use that for protecting the GOT and--on some archs--the PLT.
Amazing testing turnaround by miod@, who apparently violated relativity to get back results on some archs as fast as he did
|
#
1.22 |
|
02-Nov-2015 |
guenther |
Fix typo: s/DT_JUMPREL/DT_JMPREL/
|
#
1.21 |
|
28-Aug-2015 |
guenther |
Use kbind for lazy binding GOT/PLT updates on sh (i.e. landisk)
Much discussion with and assistance from miod and deraadt ok deraadt@
|
Revision tags: OPENBSD_5_4_BASE OPENBSD_5_5_BASE OPENBSD_5_6_BASE OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.20 |
|
13-Jun-2013 |
brad |
Appease LLVM warning..
error: indirection of non-volatile null pointer will be deleted, not trap [-Werror,-Wnull-dereference]
Suggestion from matthew@ Ok matthew@ miod@
|
#
1.19 |
|
01-Jun-2013 |
miod |
Introduce ltrace(1). This tool works with ld.so to inject utrace record for each plt call, allowing to trace a binary linked against shared library at the public function call level.
To do so, ltrace(1) sets up some environment variables to enable plt tracing in ld.so, and invokes ktrace(2) for utrace events. ld.so will force lazy binding and will send an utrace record in the plt resolver, without updating the plt.
Minimal filtering capabilities are provided, inspired by Solaris' truss -u, to limit tracing to libraries and/or symbol names. Non-traced libraries and symbols will have the regular resolver processing, with the expected plt update.
"Get it in" deraadt
|
#
1.18 |
|
08-May-2013 |
guenther |
Implement symbol caching and RELACOUNT/RELCOUNT optimizations. Much assistance and testing by miod
ok miod@
|
#
1.17 |
|
29-Mar-2013 |
miod |
Enable lazy binding by default.
|
#
1.16 |
|
26-Mar-2013 |
miod |
SH is a RelA architecture, not a Rel one. Fix _dl_bind() and lazy gotplt relocation to correctly process RelA entries. This allows lazy binding to work so far; not enabled yet, must survive some serious churning first.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.15 |
|
06-Apr-2011 |
miod |
Avoid using NULL in non-pointer contexts: use 0 for integer values and '\0' for chars.
|
Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
|
#
1.14 |
|
02-May-2010 |
guenther |
Combine the signal mask handling into _dl_thread_bind_lock(), as it's MI.
ok drahn@
|
Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
|
#
1.13 |
|
24-Jul-2008 |
guenther |
release the bind lock before resetting the signal mask
ok kurt@
|
#
1.12 |
|
27-Jun-2008 |
miod |
Remove again the old _dl_md_reloc() calls-through-plt workaround: it is no longer necessary now that libgcc is built correctly, and it caused the elfbug regress test to fail.
|
#
1.11 |
|
09-Apr-2008 |
kurt |
Improve support for shared libs linked at non-zero addreses: - rename private values in struct elf_object to better describe their meaning: s/load_offs/obj_base/ "object's address '0' base" s/load_addr/load_base/ "The base address of the loadable segments" - gdb needs the obj_base value so swap positions with load_base in struct elf_object - fix a few occurrences of where load_base was used instead of obj_base.
With help and okay drahn@
|
Revision tags: OPENBSD_4_3_BASE
|
#
1.10 |
|
24-Feb-2008 |
drahn |
Use rounded down address when changing memory protections on the GOT, such that we don't accidentally touch the page after the GOT.
Bug found on sparc64 affected other platforms as well.
ok kettenis@
|
#
1.9 |
|
27-Nov-2007 |
miod |
Make _dl_md_reloc_got() report errors, and take them into account. Fixes PR #5579.
|
Revision tags: OPENBSD_4_2_BASE
|
#
1.8 |
|
05-May-2007 |
drahn |
Provide hook so that rthreads can provide a spinlock to protect from races in lazy binding. ok art@, kurt@
|
Revision tags: OPENBSD_4_1_BASE
|
#
1.7 |
|
07-Mar-2007 |
drahn |
Put the workaround back in because gcc fails to build otherwise. ok deraadt@
|
#
1.6 |
|
06-Mar-2007 |
drahn |
Revert a workaround that was put in for softfpu ABI violations, hardfp doesnt. ok miod.
|
#
1.5 |
|
03-Feb-2007 |
drahn |
Kludge around a horrible problem where gcc 'knows' that __udivsi3 will only clobber r0 and r4, and will not modify any other registers. Unfortunately calling thru the PLT clobbers other registers eg, r1, which then breaks because gcc doesn't reload the proper value.
|
#
1.4 |
|
11-Nov-2006 |
drahn |
remove '#if 0' block.
|
#
1.3 |
|
10-Nov-2006 |
drahn |
better...
|
#
1.2 |
|
10-Nov-2006 |
drahn |
Getting much closer.
|
#
1.1 |
|
10-Nov-2006 |
drahn |
Not quite working ld.so support for sh
|
#
1.33 |
|
07-Dec-2019 |
guenther |
Disable ltrace for objects linked with -znow, as at least on amd64, linking that was deletes the lazy relocation trampoline which ltrace currently depends on
problem reported by tb@ directional feedback kettenis@ ok mpi@
|
#
1.32 |
|
24-Oct-2019 |
guenther |
Delete unused support for relocations that don't require alignment.
ok mpi@ kettenis@
|
#
1.31 |
|
23-Oct-2019 |
guenther |
Prefer the size-independent ELF identifiers over the size-specific ones. Strip superfluous parens from return statements while here.
Done programatically with two perl invocations
idea ok kettenis@ drahn@ ok visa@
|
Revision tags: OPENBSD_6_6_BASE
|
#
1.30 |
|
05-Oct-2019 |
guenther |
Delete some obsolete debugging #ifdefs blocks
ok mlarkin@, mpi@, krw@, deraadt@
|
#
1.29 |
|
06-Aug-2019 |
guenther |
Factor out TEXTREL mprotecting from the per-arch files into _dl_rtld(), hiding the actual grotty bits in inline functions
ok mpi@
|
#
1.28 |
|
04-Aug-2019 |
guenther |
Simplify _dl_find_symbol(). Currently, it returns three values: - the symbol it found, returned via the second argument - the base offset of the the object it was found in, via the return value - optionally: the object it was found in, returned via the last argument
Instead, return a struct with the symbol and object pointers and let the caller get the base offset from the object's obj_base member. On at least aarch64, amd64, mips64, powerpc, and sparc64, a two word struct like this is passed in registers.
ok mpi@, kettenis@
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.27 |
|
16-Nov-2018 |
guenther |
Finish ld.so's transition to GNU_RELRO: eliminate support for using __got_{start,end} to find a region to mark read-only. It was only used for binaries that didn't have a GNU_RELRO segment, but all archs have been using that for over a year. Since support for insecure-PLT layouts on powerpc and alpha have been removed, all archs handle GNU_RELRO the same way and the support can be moved from the MD code to the MI code.
ok mpi@
|
#
1.26 |
|
25-Oct-2018 |
guenther |
The compilers already put static arrays in .rodata when not written to; marking them const will keep a source change from silently moving them back to .data
ok deraadt@ kettenis@
|
Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.25 |
|
24-Jan-2017 |
guenther |
On fatal errors, kill ourselves with thrkill(0,9,NULL) instead of simply exiting, via helper functions _dl_die(), _dl_diedie(), and _dl_oom().
prompted by a complaint from jsing@ ok jsing@ deraadt@
|
Revision tags: OPENBSD_6_0_BASE
|
#
1.24 |
|
21-Jun-2016 |
deraadt |
When handling DT_TEXTREL only set the mapping to READ+WRITE, ignore possible EXEC permission for the section, because the proper permission is set late, and there are no thread concerns here. Avoids W^X issues in oddball cases. ok guenther kettenis
|
Revision tags: OPENBSD_5_9_BASE
|
#
1.23 |
|
02-Nov-2015 |
guenther |
Factor out the logic for mprotecting the memory between two symbols into a new MI routine _dl_protect_segment(), and use that for protecting the GOT and--on some archs--the PLT.
Amazing testing turnaround by miod@, who apparently violated relativity to get back results on some archs as fast as he did
|
#
1.22 |
|
02-Nov-2015 |
guenther |
Fix typo: s/DT_JUMPREL/DT_JMPREL/
|
#
1.21 |
|
28-Aug-2015 |
guenther |
Use kbind for lazy binding GOT/PLT updates on sh (i.e. landisk)
Much discussion with and assistance from miod and deraadt ok deraadt@
|
Revision tags: OPENBSD_5_4_BASE OPENBSD_5_5_BASE OPENBSD_5_6_BASE OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.20 |
|
13-Jun-2013 |
brad |
Appease LLVM warning..
error: indirection of non-volatile null pointer will be deleted, not trap [-Werror,-Wnull-dereference]
Suggestion from matthew@ Ok matthew@ miod@
|
#
1.19 |
|
01-Jun-2013 |
miod |
Introduce ltrace(1). This tool works with ld.so to inject utrace record for each plt call, allowing to trace a binary linked against shared library at the public function call level.
To do so, ltrace(1) sets up some environment variables to enable plt tracing in ld.so, and invokes ktrace(2) for utrace events. ld.so will force lazy binding and will send an utrace record in the plt resolver, without updating the plt.
Minimal filtering capabilities are provided, inspired by Solaris' truss -u, to limit tracing to libraries and/or symbol names. Non-traced libraries and symbols will have the regular resolver processing, with the expected plt update.
"Get it in" deraadt
|
#
1.18 |
|
08-May-2013 |
guenther |
Implement symbol caching and RELACOUNT/RELCOUNT optimizations. Much assistance and testing by miod
ok miod@
|
#
1.17 |
|
29-Mar-2013 |
miod |
Enable lazy binding by default.
|
#
1.16 |
|
26-Mar-2013 |
miod |
SH is a RelA architecture, not a Rel one. Fix _dl_bind() and lazy gotplt relocation to correctly process RelA entries. This allows lazy binding to work so far; not enabled yet, must survive some serious churning first.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.15 |
|
06-Apr-2011 |
miod |
Avoid using NULL in non-pointer contexts: use 0 for integer values and '\0' for chars.
|
Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
|
#
1.14 |
|
02-May-2010 |
guenther |
Combine the signal mask handling into _dl_thread_bind_lock(), as it's MI.
ok drahn@
|
Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
|
#
1.13 |
|
24-Jul-2008 |
guenther |
release the bind lock before resetting the signal mask
ok kurt@
|
#
1.12 |
|
27-Jun-2008 |
miod |
Remove again the old _dl_md_reloc() calls-through-plt workaround: it is no longer necessary now that libgcc is built correctly, and it caused the elfbug regress test to fail.
|
#
1.11 |
|
09-Apr-2008 |
kurt |
Improve support for shared libs linked at non-zero addreses: - rename private values in struct elf_object to better describe their meaning: s/load_offs/obj_base/ "object's address '0' base" s/load_addr/load_base/ "The base address of the loadable segments" - gdb needs the obj_base value so swap positions with load_base in struct elf_object - fix a few occurrences of where load_base was used instead of obj_base.
With help and okay drahn@
|
Revision tags: OPENBSD_4_3_BASE
|
#
1.10 |
|
24-Feb-2008 |
drahn |
Use rounded down address when changing memory protections on the GOT, such that we don't accidentally touch the page after the GOT.
Bug found on sparc64 affected other platforms as well.
ok kettenis@
|
#
1.9 |
|
27-Nov-2007 |
miod |
Make _dl_md_reloc_got() report errors, and take them into account. Fixes PR #5579.
|
Revision tags: OPENBSD_4_2_BASE
|
#
1.8 |
|
05-May-2007 |
drahn |
Provide hook so that rthreads can provide a spinlock to protect from races in lazy binding. ok art@, kurt@
|
Revision tags: OPENBSD_4_1_BASE
|
#
1.7 |
|
07-Mar-2007 |
drahn |
Put the workaround back in because gcc fails to build otherwise. ok deraadt@
|
#
1.6 |
|
06-Mar-2007 |
drahn |
Revert a workaround that was put in for softfpu ABI violations, hardfp doesnt. ok miod.
|
#
1.5 |
|
03-Feb-2007 |
drahn |
Kludge around a horrible problem where gcc 'knows' that __udivsi3 will only clobber r0 and r4, and will not modify any other registers. Unfortunately calling thru the PLT clobbers other registers eg, r1, which then breaks because gcc doesn't reload the proper value.
|
#
1.4 |
|
11-Nov-2006 |
drahn |
remove '#if 0' block.
|
#
1.3 |
|
10-Nov-2006 |
drahn |
better...
|
#
1.2 |
|
10-Nov-2006 |
drahn |
Getting much closer.
|
#
1.1 |
|
10-Nov-2006 |
drahn |
Not quite working ld.so support for sh
|
#
1.32 |
|
24-Oct-2019 |
guenther |
Delete unused support for relocations that don't require alignment.
ok mpi@ kettenis@
|
#
1.31 |
|
23-Oct-2019 |
guenther |
Prefer the size-independent ELF identifiers over the size-specific ones. Strip superfluous parens from return statements while here.
Done programatically with two perl invocations
idea ok kettenis@ drahn@ ok visa@
|
Revision tags: OPENBSD_6_6_BASE
|
#
1.30 |
|
05-Oct-2019 |
guenther |
Delete some obsolete debugging #ifdefs blocks
ok mlarkin@, mpi@, krw@, deraadt@
|
#
1.29 |
|
06-Aug-2019 |
guenther |
Factor out TEXTREL mprotecting from the per-arch files into _dl_rtld(), hiding the actual grotty bits in inline functions
ok mpi@
|
#
1.28 |
|
04-Aug-2019 |
guenther |
Simplify _dl_find_symbol(). Currently, it returns three values: - the symbol it found, returned via the second argument - the base offset of the the object it was found in, via the return value - optionally: the object it was found in, returned via the last argument
Instead, return a struct with the symbol and object pointers and let the caller get the base offset from the object's obj_base member. On at least aarch64, amd64, mips64, powerpc, and sparc64, a two word struct like this is passed in registers.
ok mpi@, kettenis@
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.27 |
|
16-Nov-2018 |
guenther |
Finish ld.so's transition to GNU_RELRO: eliminate support for using __got_{start,end} to find a region to mark read-only. It was only used for binaries that didn't have a GNU_RELRO segment, but all archs have been using that for over a year. Since support for insecure-PLT layouts on powerpc and alpha have been removed, all archs handle GNU_RELRO the same way and the support can be moved from the MD code to the MI code.
ok mpi@
|
#
1.26 |
|
25-Oct-2018 |
guenther |
The compilers already put static arrays in .rodata when not written to; marking them const will keep a source change from silently moving them back to .data
ok deraadt@ kettenis@
|
Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.25 |
|
24-Jan-2017 |
guenther |
On fatal errors, kill ourselves with thrkill(0,9,NULL) instead of simply exiting, via helper functions _dl_die(), _dl_diedie(), and _dl_oom().
prompted by a complaint from jsing@ ok jsing@ deraadt@
|
Revision tags: OPENBSD_6_0_BASE
|
#
1.24 |
|
21-Jun-2016 |
deraadt |
When handling DT_TEXTREL only set the mapping to READ+WRITE, ignore possible EXEC permission for the section, because the proper permission is set late, and there are no thread concerns here. Avoids W^X issues in oddball cases. ok guenther kettenis
|
Revision tags: OPENBSD_5_9_BASE
|
#
1.23 |
|
02-Nov-2015 |
guenther |
Factor out the logic for mprotecting the memory between two symbols into a new MI routine _dl_protect_segment(), and use that for protecting the GOT and--on some archs--the PLT.
Amazing testing turnaround by miod@, who apparently violated relativity to get back results on some archs as fast as he did
|
#
1.22 |
|
02-Nov-2015 |
guenther |
Fix typo: s/DT_JUMPREL/DT_JMPREL/
|
#
1.21 |
|
28-Aug-2015 |
guenther |
Use kbind for lazy binding GOT/PLT updates on sh (i.e. landisk)
Much discussion with and assistance from miod and deraadt ok deraadt@
|
Revision tags: OPENBSD_5_4_BASE OPENBSD_5_5_BASE OPENBSD_5_6_BASE OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.20 |
|
13-Jun-2013 |
brad |
Appease LLVM warning..
error: indirection of non-volatile null pointer will be deleted, not trap [-Werror,-Wnull-dereference]
Suggestion from matthew@ Ok matthew@ miod@
|
#
1.19 |
|
01-Jun-2013 |
miod |
Introduce ltrace(1). This tool works with ld.so to inject utrace record for each plt call, allowing to trace a binary linked against shared library at the public function call level.
To do so, ltrace(1) sets up some environment variables to enable plt tracing in ld.so, and invokes ktrace(2) for utrace events. ld.so will force lazy binding and will send an utrace record in the plt resolver, without updating the plt.
Minimal filtering capabilities are provided, inspired by Solaris' truss -u, to limit tracing to libraries and/or symbol names. Non-traced libraries and symbols will have the regular resolver processing, with the expected plt update.
"Get it in" deraadt
|
#
1.18 |
|
08-May-2013 |
guenther |
Implement symbol caching and RELACOUNT/RELCOUNT optimizations. Much assistance and testing by miod
ok miod@
|
#
1.17 |
|
29-Mar-2013 |
miod |
Enable lazy binding by default.
|
#
1.16 |
|
26-Mar-2013 |
miod |
SH is a RelA architecture, not a Rel one. Fix _dl_bind() and lazy gotplt relocation to correctly process RelA entries. This allows lazy binding to work so far; not enabled yet, must survive some serious churning first.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.15 |
|
06-Apr-2011 |
miod |
Avoid using NULL in non-pointer contexts: use 0 for integer values and '\0' for chars.
|
Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
|
#
1.14 |
|
02-May-2010 |
guenther |
Combine the signal mask handling into _dl_thread_bind_lock(), as it's MI.
ok drahn@
|
Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
|
#
1.13 |
|
24-Jul-2008 |
guenther |
release the bind lock before resetting the signal mask
ok kurt@
|
#
1.12 |
|
27-Jun-2008 |
miod |
Remove again the old _dl_md_reloc() calls-through-plt workaround: it is no longer necessary now that libgcc is built correctly, and it caused the elfbug regress test to fail.
|
#
1.11 |
|
09-Apr-2008 |
kurt |
Improve support for shared libs linked at non-zero addreses: - rename private values in struct elf_object to better describe their meaning: s/load_offs/obj_base/ "object's address '0' base" s/load_addr/load_base/ "The base address of the loadable segments" - gdb needs the obj_base value so swap positions with load_base in struct elf_object - fix a few occurrences of where load_base was used instead of obj_base.
With help and okay drahn@
|
Revision tags: OPENBSD_4_3_BASE
|
#
1.10 |
|
24-Feb-2008 |
drahn |
Use rounded down address when changing memory protections on the GOT, such that we don't accidentally touch the page after the GOT.
Bug found on sparc64 affected other platforms as well.
ok kettenis@
|
#
1.9 |
|
27-Nov-2007 |
miod |
Make _dl_md_reloc_got() report errors, and take them into account. Fixes PR #5579.
|
Revision tags: OPENBSD_4_2_BASE
|
#
1.8 |
|
05-May-2007 |
drahn |
Provide hook so that rthreads can provide a spinlock to protect from races in lazy binding. ok art@, kurt@
|
Revision tags: OPENBSD_4_1_BASE
|
#
1.7 |
|
07-Mar-2007 |
drahn |
Put the workaround back in because gcc fails to build otherwise. ok deraadt@
|
#
1.6 |
|
06-Mar-2007 |
drahn |
Revert a workaround that was put in for softfpu ABI violations, hardfp doesnt. ok miod.
|
#
1.5 |
|
03-Feb-2007 |
drahn |
Kludge around a horrible problem where gcc 'knows' that __udivsi3 will only clobber r0 and r4, and will not modify any other registers. Unfortunately calling thru the PLT clobbers other registers eg, r1, which then breaks because gcc doesn't reload the proper value.
|
#
1.4 |
|
11-Nov-2006 |
drahn |
remove '#if 0' block.
|
#
1.3 |
|
10-Nov-2006 |
drahn |
better...
|
#
1.2 |
|
10-Nov-2006 |
drahn |
Getting much closer.
|
#
1.1 |
|
10-Nov-2006 |
drahn |
Not quite working ld.so support for sh
|
#
1.31 |
|
23-Oct-2019 |
guenther |
Prefer the size-independent ELF identifiers over the size-specific ones. Strip superfluous parens from return statements while here.
Done programatically with two perl invocations
idea ok kettenis@ drahn@ ok visa@
|
Revision tags: OPENBSD_6_6_BASE
|
#
1.30 |
|
05-Oct-2019 |
guenther |
Delete some obsolete debugging #ifdefs blocks
ok mlarkin@, mpi@, krw@, deraadt@
|
#
1.29 |
|
06-Aug-2019 |
guenther |
Factor out TEXTREL mprotecting from the per-arch files into _dl_rtld(), hiding the actual grotty bits in inline functions
ok mpi@
|
#
1.28 |
|
04-Aug-2019 |
guenther |
Simplify _dl_find_symbol(). Currently, it returns three values: - the symbol it found, returned via the second argument - the base offset of the the object it was found in, via the return value - optionally: the object it was found in, returned via the last argument
Instead, return a struct with the symbol and object pointers and let the caller get the base offset from the object's obj_base member. On at least aarch64, amd64, mips64, powerpc, and sparc64, a two word struct like this is passed in registers.
ok mpi@, kettenis@
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.27 |
|
16-Nov-2018 |
guenther |
Finish ld.so's transition to GNU_RELRO: eliminate support for using __got_{start,end} to find a region to mark read-only. It was only used for binaries that didn't have a GNU_RELRO segment, but all archs have been using that for over a year. Since support for insecure-PLT layouts on powerpc and alpha have been removed, all archs handle GNU_RELRO the same way and the support can be moved from the MD code to the MI code.
ok mpi@
|
#
1.26 |
|
25-Oct-2018 |
guenther |
The compilers already put static arrays in .rodata when not written to; marking them const will keep a source change from silently moving them back to .data
ok deraadt@ kettenis@
|
Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.25 |
|
24-Jan-2017 |
guenther |
On fatal errors, kill ourselves with thrkill(0,9,NULL) instead of simply exiting, via helper functions _dl_die(), _dl_diedie(), and _dl_oom().
prompted by a complaint from jsing@ ok jsing@ deraadt@
|
Revision tags: OPENBSD_6_0_BASE
|
#
1.24 |
|
21-Jun-2016 |
deraadt |
When handling DT_TEXTREL only set the mapping to READ+WRITE, ignore possible EXEC permission for the section, because the proper permission is set late, and there are no thread concerns here. Avoids W^X issues in oddball cases. ok guenther kettenis
|
Revision tags: OPENBSD_5_9_BASE
|
#
1.23 |
|
02-Nov-2015 |
guenther |
Factor out the logic for mprotecting the memory between two symbols into a new MI routine _dl_protect_segment(), and use that for protecting the GOT and--on some archs--the PLT.
Amazing testing turnaround by miod@, who apparently violated relativity to get back results on some archs as fast as he did
|
#
1.22 |
|
02-Nov-2015 |
guenther |
Fix typo: s/DT_JUMPREL/DT_JMPREL/
|
#
1.21 |
|
28-Aug-2015 |
guenther |
Use kbind for lazy binding GOT/PLT updates on sh (i.e. landisk)
Much discussion with and assistance from miod and deraadt ok deraadt@
|
Revision tags: OPENBSD_5_4_BASE OPENBSD_5_5_BASE OPENBSD_5_6_BASE OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.20 |
|
13-Jun-2013 |
brad |
Appease LLVM warning..
error: indirection of non-volatile null pointer will be deleted, not trap [-Werror,-Wnull-dereference]
Suggestion from matthew@ Ok matthew@ miod@
|
#
1.19 |
|
01-Jun-2013 |
miod |
Introduce ltrace(1). This tool works with ld.so to inject utrace record for each plt call, allowing to trace a binary linked against shared library at the public function call level.
To do so, ltrace(1) sets up some environment variables to enable plt tracing in ld.so, and invokes ktrace(2) for utrace events. ld.so will force lazy binding and will send an utrace record in the plt resolver, without updating the plt.
Minimal filtering capabilities are provided, inspired by Solaris' truss -u, to limit tracing to libraries and/or symbol names. Non-traced libraries and symbols will have the regular resolver processing, with the expected plt update.
"Get it in" deraadt
|
#
1.18 |
|
08-May-2013 |
guenther |
Implement symbol caching and RELACOUNT/RELCOUNT optimizations. Much assistance and testing by miod
ok miod@
|
#
1.17 |
|
29-Mar-2013 |
miod |
Enable lazy binding by default.
|
#
1.16 |
|
26-Mar-2013 |
miod |
SH is a RelA architecture, not a Rel one. Fix _dl_bind() and lazy gotplt relocation to correctly process RelA entries. This allows lazy binding to work so far; not enabled yet, must survive some serious churning first.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.15 |
|
06-Apr-2011 |
miod |
Avoid using NULL in non-pointer contexts: use 0 for integer values and '\0' for chars.
|
Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
|
#
1.14 |
|
02-May-2010 |
guenther |
Combine the signal mask handling into _dl_thread_bind_lock(), as it's MI.
ok drahn@
|
Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
|
#
1.13 |
|
24-Jul-2008 |
guenther |
release the bind lock before resetting the signal mask
ok kurt@
|
#
1.12 |
|
27-Jun-2008 |
miod |
Remove again the old _dl_md_reloc() calls-through-plt workaround: it is no longer necessary now that libgcc is built correctly, and it caused the elfbug regress test to fail.
|
#
1.11 |
|
09-Apr-2008 |
kurt |
Improve support for shared libs linked at non-zero addreses: - rename private values in struct elf_object to better describe their meaning: s/load_offs/obj_base/ "object's address '0' base" s/load_addr/load_base/ "The base address of the loadable segments" - gdb needs the obj_base value so swap positions with load_base in struct elf_object - fix a few occurrences of where load_base was used instead of obj_base.
With help and okay drahn@
|
Revision tags: OPENBSD_4_3_BASE
|
#
1.10 |
|
24-Feb-2008 |
drahn |
Use rounded down address when changing memory protections on the GOT, such that we don't accidentally touch the page after the GOT.
Bug found on sparc64 affected other platforms as well.
ok kettenis@
|
#
1.9 |
|
27-Nov-2007 |
miod |
Make _dl_md_reloc_got() report errors, and take them into account. Fixes PR #5579.
|
Revision tags: OPENBSD_4_2_BASE
|
#
1.8 |
|
05-May-2007 |
drahn |
Provide hook so that rthreads can provide a spinlock to protect from races in lazy binding. ok art@, kurt@
|
Revision tags: OPENBSD_4_1_BASE
|
#
1.7 |
|
07-Mar-2007 |
drahn |
Put the workaround back in because gcc fails to build otherwise. ok deraadt@
|
#
1.6 |
|
06-Mar-2007 |
drahn |
Revert a workaround that was put in for softfpu ABI violations, hardfp doesnt. ok miod.
|
#
1.5 |
|
03-Feb-2007 |
drahn |
Kludge around a horrible problem where gcc 'knows' that __udivsi3 will only clobber r0 and r4, and will not modify any other registers. Unfortunately calling thru the PLT clobbers other registers eg, r1, which then breaks because gcc doesn't reload the proper value.
|
#
1.4 |
|
11-Nov-2006 |
drahn |
remove '#if 0' block.
|
#
1.3 |
|
10-Nov-2006 |
drahn |
better...
|
#
1.2 |
|
10-Nov-2006 |
drahn |
Getting much closer.
|
#
1.1 |
|
10-Nov-2006 |
drahn |
Not quite working ld.so support for sh
|
#
1.30 |
|
05-Oct-2019 |
guenther |
Delete some obsolete debugging #ifdefs blocks
ok mlarkin@, mpi@, krw@, deraadt@
|
#
1.29 |
|
06-Aug-2019 |
guenther |
Factor out TEXTREL mprotecting from the per-arch files into _dl_rtld(), hiding the actual grotty bits in inline functions
ok mpi@
|
#
1.28 |
|
04-Aug-2019 |
guenther |
Simplify _dl_find_symbol(). Currently, it returns three values: - the symbol it found, returned via the second argument - the base offset of the the object it was found in, via the return value - optionally: the object it was found in, returned via the last argument
Instead, return a struct with the symbol and object pointers and let the caller get the base offset from the object's obj_base member. On at least aarch64, amd64, mips64, powerpc, and sparc64, a two word struct like this is passed in registers.
ok mpi@, kettenis@
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.27 |
|
16-Nov-2018 |
guenther |
Finish ld.so's transition to GNU_RELRO: eliminate support for using __got_{start,end} to find a region to mark read-only. It was only used for binaries that didn't have a GNU_RELRO segment, but all archs have been using that for over a year. Since support for insecure-PLT layouts on powerpc and alpha have been removed, all archs handle GNU_RELRO the same way and the support can be moved from the MD code to the MI code.
ok mpi@
|
#
1.26 |
|
25-Oct-2018 |
guenther |
The compilers already put static arrays in .rodata when not written to; marking them const will keep a source change from silently moving them back to .data
ok deraadt@ kettenis@
|
Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.25 |
|
24-Jan-2017 |
guenther |
On fatal errors, kill ourselves with thrkill(0,9,NULL) instead of simply exiting, via helper functions _dl_die(), _dl_diedie(), and _dl_oom().
prompted by a complaint from jsing@ ok jsing@ deraadt@
|
Revision tags: OPENBSD_6_0_BASE
|
#
1.24 |
|
21-Jun-2016 |
deraadt |
When handling DT_TEXTREL only set the mapping to READ+WRITE, ignore possible EXEC permission for the section, because the proper permission is set late, and there are no thread concerns here. Avoids W^X issues in oddball cases. ok guenther kettenis
|
Revision tags: OPENBSD_5_9_BASE
|
#
1.23 |
|
02-Nov-2015 |
guenther |
Factor out the logic for mprotecting the memory between two symbols into a new MI routine _dl_protect_segment(), and use that for protecting the GOT and--on some archs--the PLT.
Amazing testing turnaround by miod@, who apparently violated relativity to get back results on some archs as fast as he did
|
#
1.22 |
|
02-Nov-2015 |
guenther |
Fix typo: s/DT_JUMPREL/DT_JMPREL/
|
#
1.21 |
|
28-Aug-2015 |
guenther |
Use kbind for lazy binding GOT/PLT updates on sh (i.e. landisk)
Much discussion with and assistance from miod and deraadt ok deraadt@
|
Revision tags: OPENBSD_5_4_BASE OPENBSD_5_5_BASE OPENBSD_5_6_BASE OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.20 |
|
13-Jun-2013 |
brad |
Appease LLVM warning..
error: indirection of non-volatile null pointer will be deleted, not trap [-Werror,-Wnull-dereference]
Suggestion from matthew@ Ok matthew@ miod@
|
#
1.19 |
|
01-Jun-2013 |
miod |
Introduce ltrace(1). This tool works with ld.so to inject utrace record for each plt call, allowing to trace a binary linked against shared library at the public function call level.
To do so, ltrace(1) sets up some environment variables to enable plt tracing in ld.so, and invokes ktrace(2) for utrace events. ld.so will force lazy binding and will send an utrace record in the plt resolver, without updating the plt.
Minimal filtering capabilities are provided, inspired by Solaris' truss -u, to limit tracing to libraries and/or symbol names. Non-traced libraries and symbols will have the regular resolver processing, with the expected plt update.
"Get it in" deraadt
|
#
1.18 |
|
08-May-2013 |
guenther |
Implement symbol caching and RELACOUNT/RELCOUNT optimizations. Much assistance and testing by miod
ok miod@
|
#
1.17 |
|
29-Mar-2013 |
miod |
Enable lazy binding by default.
|
#
1.16 |
|
26-Mar-2013 |
miod |
SH is a RelA architecture, not a Rel one. Fix _dl_bind() and lazy gotplt relocation to correctly process RelA entries. This allows lazy binding to work so far; not enabled yet, must survive some serious churning first.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.15 |
|
06-Apr-2011 |
miod |
Avoid using NULL in non-pointer contexts: use 0 for integer values and '\0' for chars.
|
Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
|
#
1.14 |
|
02-May-2010 |
guenther |
Combine the signal mask handling into _dl_thread_bind_lock(), as it's MI.
ok drahn@
|
Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
|
#
1.13 |
|
24-Jul-2008 |
guenther |
release the bind lock before resetting the signal mask
ok kurt@
|
#
1.12 |
|
27-Jun-2008 |
miod |
Remove again the old _dl_md_reloc() calls-through-plt workaround: it is no longer necessary now that libgcc is built correctly, and it caused the elfbug regress test to fail.
|
#
1.11 |
|
09-Apr-2008 |
kurt |
Improve support for shared libs linked at non-zero addreses: - rename private values in struct elf_object to better describe their meaning: s/load_offs/obj_base/ "object's address '0' base" s/load_addr/load_base/ "The base address of the loadable segments" - gdb needs the obj_base value so swap positions with load_base in struct elf_object - fix a few occurrences of where load_base was used instead of obj_base.
With help and okay drahn@
|
Revision tags: OPENBSD_4_3_BASE
|
#
1.10 |
|
24-Feb-2008 |
drahn |
Use rounded down address when changing memory protections on the GOT, such that we don't accidentally touch the page after the GOT.
Bug found on sparc64 affected other platforms as well.
ok kettenis@
|
#
1.9 |
|
27-Nov-2007 |
miod |
Make _dl_md_reloc_got() report errors, and take them into account. Fixes PR #5579.
|
Revision tags: OPENBSD_4_2_BASE
|
#
1.8 |
|
05-May-2007 |
drahn |
Provide hook so that rthreads can provide a spinlock to protect from races in lazy binding. ok art@, kurt@
|
Revision tags: OPENBSD_4_1_BASE
|
#
1.7 |
|
07-Mar-2007 |
drahn |
Put the workaround back in because gcc fails to build otherwise. ok deraadt@
|
#
1.6 |
|
06-Mar-2007 |
drahn |
Revert a workaround that was put in for softfpu ABI violations, hardfp doesnt. ok miod.
|
#
1.5 |
|
03-Feb-2007 |
drahn |
Kludge around a horrible problem where gcc 'knows' that __udivsi3 will only clobber r0 and r4, and will not modify any other registers. Unfortunately calling thru the PLT clobbers other registers eg, r1, which then breaks because gcc doesn't reload the proper value.
|
#
1.4 |
|
11-Nov-2006 |
drahn |
remove '#if 0' block.
|
#
1.3 |
|
10-Nov-2006 |
drahn |
better...
|
#
1.2 |
|
10-Nov-2006 |
drahn |
Getting much closer.
|
#
1.1 |
|
10-Nov-2006 |
drahn |
Not quite working ld.so support for sh
|
#
1.29 |
|
06-Aug-2019 |
guenther |
Factor out TEXTREL mprotecting from the per-arch files into _dl_rtld(), hiding the actual grotty bits in inline functions
ok mpi@
|
#
1.28 |
|
04-Aug-2019 |
guenther |
Simplify _dl_find_symbol(). Currently, it returns three values: - the symbol it found, returned via the second argument - the base offset of the the object it was found in, via the return value - optionally: the object it was found in, returned via the last argument
Instead, return a struct with the symbol and object pointers and let the caller get the base offset from the object's obj_base member. On at least aarch64, amd64, mips64, powerpc, and sparc64, a two word struct like this is passed in registers.
ok mpi@, kettenis@
|
Revision tags: OPENBSD_6_5_BASE
|
#
1.27 |
|
16-Nov-2018 |
guenther |
Finish ld.so's transition to GNU_RELRO: eliminate support for using __got_{start,end} to find a region to mark read-only. It was only used for binaries that didn't have a GNU_RELRO segment, but all archs have been using that for over a year. Since support for insecure-PLT layouts on powerpc and alpha have been removed, all archs handle GNU_RELRO the same way and the support can be moved from the MD code to the MI code.
ok mpi@
|
#
1.26 |
|
25-Oct-2018 |
guenther |
The compilers already put static arrays in .rodata when not written to; marking them const will keep a source change from silently moving them back to .data
ok deraadt@ kettenis@
|
Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.25 |
|
24-Jan-2017 |
guenther |
On fatal errors, kill ourselves with thrkill(0,9,NULL) instead of simply exiting, via helper functions _dl_die(), _dl_diedie(), and _dl_oom().
prompted by a complaint from jsing@ ok jsing@ deraadt@
|
Revision tags: OPENBSD_6_0_BASE
|
#
1.24 |
|
21-Jun-2016 |
deraadt |
When handling DT_TEXTREL only set the mapping to READ+WRITE, ignore possible EXEC permission for the section, because the proper permission is set late, and there are no thread concerns here. Avoids W^X issues in oddball cases. ok guenther kettenis
|
Revision tags: OPENBSD_5_9_BASE
|
#
1.23 |
|
02-Nov-2015 |
guenther |
Factor out the logic for mprotecting the memory between two symbols into a new MI routine _dl_protect_segment(), and use that for protecting the GOT and--on some archs--the PLT.
Amazing testing turnaround by miod@, who apparently violated relativity to get back results on some archs as fast as he did
|
#
1.22 |
|
02-Nov-2015 |
guenther |
Fix typo: s/DT_JUMPREL/DT_JMPREL/
|
#
1.21 |
|
28-Aug-2015 |
guenther |
Use kbind for lazy binding GOT/PLT updates on sh (i.e. landisk)
Much discussion with and assistance from miod and deraadt ok deraadt@
|
Revision tags: OPENBSD_5_4_BASE OPENBSD_5_5_BASE OPENBSD_5_6_BASE OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.20 |
|
13-Jun-2013 |
brad |
Appease LLVM warning..
error: indirection of non-volatile null pointer will be deleted, not trap [-Werror,-Wnull-dereference]
Suggestion from matthew@ Ok matthew@ miod@
|
#
1.19 |
|
01-Jun-2013 |
miod |
Introduce ltrace(1). This tool works with ld.so to inject utrace record for each plt call, allowing to trace a binary linked against shared library at the public function call level.
To do so, ltrace(1) sets up some environment variables to enable plt tracing in ld.so, and invokes ktrace(2) for utrace events. ld.so will force lazy binding and will send an utrace record in the plt resolver, without updating the plt.
Minimal filtering capabilities are provided, inspired by Solaris' truss -u, to limit tracing to libraries and/or symbol names. Non-traced libraries and symbols will have the regular resolver processing, with the expected plt update.
"Get it in" deraadt
|
#
1.18 |
|
08-May-2013 |
guenther |
Implement symbol caching and RELACOUNT/RELCOUNT optimizations. Much assistance and testing by miod
ok miod@
|
#
1.17 |
|
29-Mar-2013 |
miod |
Enable lazy binding by default.
|
#
1.16 |
|
26-Mar-2013 |
miod |
SH is a RelA architecture, not a Rel one. Fix _dl_bind() and lazy gotplt relocation to correctly process RelA entries. This allows lazy binding to work so far; not enabled yet, must survive some serious churning first.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.15 |
|
06-Apr-2011 |
miod |
Avoid using NULL in non-pointer contexts: use 0 for integer values and '\0' for chars.
|
Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
|
#
1.14 |
|
02-May-2010 |
guenther |
Combine the signal mask handling into _dl_thread_bind_lock(), as it's MI.
ok drahn@
|
Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
|
#
1.13 |
|
24-Jul-2008 |
guenther |
release the bind lock before resetting the signal mask
ok kurt@
|
#
1.12 |
|
27-Jun-2008 |
miod |
Remove again the old _dl_md_reloc() calls-through-plt workaround: it is no longer necessary now that libgcc is built correctly, and it caused the elfbug regress test to fail.
|
#
1.11 |
|
09-Apr-2008 |
kurt |
Improve support for shared libs linked at non-zero addreses: - rename private values in struct elf_object to better describe their meaning: s/load_offs/obj_base/ "object's address '0' base" s/load_addr/load_base/ "The base address of the loadable segments" - gdb needs the obj_base value so swap positions with load_base in struct elf_object - fix a few occurrences of where load_base was used instead of obj_base.
With help and okay drahn@
|
Revision tags: OPENBSD_4_3_BASE
|
#
1.10 |
|
24-Feb-2008 |
drahn |
Use rounded down address when changing memory protections on the GOT, such that we don't accidentally touch the page after the GOT.
Bug found on sparc64 affected other platforms as well.
ok kettenis@
|
#
1.9 |
|
27-Nov-2007 |
miod |
Make _dl_md_reloc_got() report errors, and take them into account. Fixes PR #5579.
|
Revision tags: OPENBSD_4_2_BASE
|
#
1.8 |
|
05-May-2007 |
drahn |
Provide hook so that rthreads can provide a spinlock to protect from races in lazy binding. ok art@, kurt@
|
Revision tags: OPENBSD_4_1_BASE
|
#
1.7 |
|
07-Mar-2007 |
drahn |
Put the workaround back in because gcc fails to build otherwise. ok deraadt@
|
#
1.6 |
|
06-Mar-2007 |
drahn |
Revert a workaround that was put in for softfpu ABI violations, hardfp doesnt. ok miod.
|
#
1.5 |
|
03-Feb-2007 |
drahn |
Kludge around a horrible problem where gcc 'knows' that __udivsi3 will only clobber r0 and r4, and will not modify any other registers. Unfortunately calling thru the PLT clobbers other registers eg, r1, which then breaks because gcc doesn't reload the proper value.
|
#
1.4 |
|
11-Nov-2006 |
drahn |
remove '#if 0' block.
|
#
1.3 |
|
10-Nov-2006 |
drahn |
better...
|
#
1.2 |
|
10-Nov-2006 |
drahn |
Getting much closer.
|
#
1.1 |
|
10-Nov-2006 |
drahn |
Not quite working ld.so support for sh
|
#
1.27 |
|
16-Nov-2018 |
guenther |
Finish ld.so's transition to GNU_RELRO: eliminate support for using __got_{start,end} to find a region to mark read-only. It was only used for binaries that didn't have a GNU_RELRO segment, but all archs have been using that for over a year. Since support for insecure-PLT layouts on powerpc and alpha have been removed, all archs handle GNU_RELRO the same way and the support can be moved from the MD code to the MI code.
ok mpi@
|
#
1.26 |
|
25-Oct-2018 |
guenther |
The compilers already put static arrays in .rodata when not written to; marking them const will keep a source change from silently moving them back to .data
ok deraadt@ kettenis@
|
Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.25 |
|
24-Jan-2017 |
guenther |
On fatal errors, kill ourselves with thrkill(0,9,NULL) instead of simply exiting, via helper functions _dl_die(), _dl_diedie(), and _dl_oom().
prompted by a complaint from jsing@ ok jsing@ deraadt@
|
Revision tags: OPENBSD_6_0_BASE
|
#
1.24 |
|
21-Jun-2016 |
deraadt |
When handling DT_TEXTREL only set the mapping to READ+WRITE, ignore possible EXEC permission for the section, because the proper permission is set late, and there are no thread concerns here. Avoids W^X issues in oddball cases. ok guenther kettenis
|
Revision tags: OPENBSD_5_9_BASE
|
#
1.23 |
|
02-Nov-2015 |
guenther |
Factor out the logic for mprotecting the memory between two symbols into a new MI routine _dl_protect_segment(), and use that for protecting the GOT and--on some archs--the PLT.
Amazing testing turnaround by miod@, who apparently violated relativity to get back results on some archs as fast as he did
|
#
1.22 |
|
02-Nov-2015 |
guenther |
Fix typo: s/DT_JUMPREL/DT_JMPREL/
|
#
1.21 |
|
28-Aug-2015 |
guenther |
Use kbind for lazy binding GOT/PLT updates on sh (i.e. landisk)
Much discussion with and assistance from miod and deraadt ok deraadt@
|
Revision tags: OPENBSD_5_4_BASE OPENBSD_5_5_BASE OPENBSD_5_6_BASE OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.20 |
|
13-Jun-2013 |
brad |
Appease LLVM warning..
error: indirection of non-volatile null pointer will be deleted, not trap [-Werror,-Wnull-dereference]
Suggestion from matthew@ Ok matthew@ miod@
|
#
1.19 |
|
01-Jun-2013 |
miod |
Introduce ltrace(1). This tool works with ld.so to inject utrace record for each plt call, allowing to trace a binary linked against shared library at the public function call level.
To do so, ltrace(1) sets up some environment variables to enable plt tracing in ld.so, and invokes ktrace(2) for utrace events. ld.so will force lazy binding and will send an utrace record in the plt resolver, without updating the plt.
Minimal filtering capabilities are provided, inspired by Solaris' truss -u, to limit tracing to libraries and/or symbol names. Non-traced libraries and symbols will have the regular resolver processing, with the expected plt update.
"Get it in" deraadt
|
#
1.18 |
|
08-May-2013 |
guenther |
Implement symbol caching and RELACOUNT/RELCOUNT optimizations. Much assistance and testing by miod
ok miod@
|
#
1.17 |
|
29-Mar-2013 |
miod |
Enable lazy binding by default.
|
#
1.16 |
|
26-Mar-2013 |
miod |
SH is a RelA architecture, not a Rel one. Fix _dl_bind() and lazy gotplt relocation to correctly process RelA entries. This allows lazy binding to work so far; not enabled yet, must survive some serious churning first.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.15 |
|
06-Apr-2011 |
miod |
Avoid using NULL in non-pointer contexts: use 0 for integer values and '\0' for chars.
|
Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
|
#
1.14 |
|
02-May-2010 |
guenther |
Combine the signal mask handling into _dl_thread_bind_lock(), as it's MI.
ok drahn@
|
Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
|
#
1.13 |
|
24-Jul-2008 |
guenther |
release the bind lock before resetting the signal mask
ok kurt@
|
#
1.12 |
|
27-Jun-2008 |
miod |
Remove again the old _dl_md_reloc() calls-through-plt workaround: it is no longer necessary now that libgcc is built correctly, and it caused the elfbug regress test to fail.
|
#
1.11 |
|
09-Apr-2008 |
kurt |
Improve support for shared libs linked at non-zero addreses: - rename private values in struct elf_object to better describe their meaning: s/load_offs/obj_base/ "object's address '0' base" s/load_addr/load_base/ "The base address of the loadable segments" - gdb needs the obj_base value so swap positions with load_base in struct elf_object - fix a few occurrences of where load_base was used instead of obj_base.
With help and okay drahn@
|
Revision tags: OPENBSD_4_3_BASE
|
#
1.10 |
|
24-Feb-2008 |
drahn |
Use rounded down address when changing memory protections on the GOT, such that we don't accidentally touch the page after the GOT.
Bug found on sparc64 affected other platforms as well.
ok kettenis@
|
#
1.9 |
|
27-Nov-2007 |
miod |
Make _dl_md_reloc_got() report errors, and take them into account. Fixes PR #5579.
|
Revision tags: OPENBSD_4_2_BASE
|
#
1.8 |
|
05-May-2007 |
drahn |
Provide hook so that rthreads can provide a spinlock to protect from races in lazy binding. ok art@, kurt@
|
Revision tags: OPENBSD_4_1_BASE
|
#
1.7 |
|
07-Mar-2007 |
drahn |
Put the workaround back in because gcc fails to build otherwise. ok deraadt@
|
#
1.6 |
|
06-Mar-2007 |
drahn |
Revert a workaround that was put in for softfpu ABI violations, hardfp doesnt. ok miod.
|
#
1.5 |
|
03-Feb-2007 |
drahn |
Kludge around a horrible problem where gcc 'knows' that __udivsi3 will only clobber r0 and r4, and will not modify any other registers. Unfortunately calling thru the PLT clobbers other registers eg, r1, which then breaks because gcc doesn't reload the proper value.
|
#
1.4 |
|
11-Nov-2006 |
drahn |
remove '#if 0' block.
|
#
1.3 |
|
10-Nov-2006 |
drahn |
better...
|
#
1.2 |
|
10-Nov-2006 |
drahn |
Getting much closer.
|
#
1.1 |
|
10-Nov-2006 |
drahn |
Not quite working ld.so support for sh
|
#
1.26 |
|
25-Oct-2018 |
guenther |
The compilers already put static arrays in .rodata when not written to; marking them const will keep a source change from silently moving them back to .data
ok deraadt@ kettenis@
|
Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE
|
#
1.25 |
|
24-Jan-2017 |
guenther |
On fatal errors, kill ourselves with thrkill(0,9,NULL) instead of simply exiting, via helper functions _dl_die(), _dl_diedie(), and _dl_oom().
prompted by a complaint from jsing@ ok jsing@ deraadt@
|
Revision tags: OPENBSD_6_0_BASE
|
#
1.24 |
|
21-Jun-2016 |
deraadt |
When handling DT_TEXTREL only set the mapping to READ+WRITE, ignore possible EXEC permission for the section, because the proper permission is set late, and there are no thread concerns here. Avoids W^X issues in oddball cases. ok guenther kettenis
|
Revision tags: OPENBSD_5_9_BASE
|
#
1.23 |
|
02-Nov-2015 |
guenther |
Factor out the logic for mprotecting the memory between two symbols into a new MI routine _dl_protect_segment(), and use that for protecting the GOT and--on some archs--the PLT.
Amazing testing turnaround by miod@, who apparently violated relativity to get back results on some archs as fast as he did
|
#
1.22 |
|
02-Nov-2015 |
guenther |
Fix typo: s/DT_JUMPREL/DT_JMPREL/
|
#
1.21 |
|
28-Aug-2015 |
guenther |
Use kbind for lazy binding GOT/PLT updates on sh (i.e. landisk)
Much discussion with and assistance from miod and deraadt ok deraadt@
|
Revision tags: OPENBSD_5_4_BASE OPENBSD_5_5_BASE OPENBSD_5_6_BASE OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.20 |
|
13-Jun-2013 |
brad |
Appease LLVM warning..
error: indirection of non-volatile null pointer will be deleted, not trap [-Werror,-Wnull-dereference]
Suggestion from matthew@ Ok matthew@ miod@
|
#
1.19 |
|
01-Jun-2013 |
miod |
Introduce ltrace(1). This tool works with ld.so to inject utrace record for each plt call, allowing to trace a binary linked against shared library at the public function call level.
To do so, ltrace(1) sets up some environment variables to enable plt tracing in ld.so, and invokes ktrace(2) for utrace events. ld.so will force lazy binding and will send an utrace record in the plt resolver, without updating the plt.
Minimal filtering capabilities are provided, inspired by Solaris' truss -u, to limit tracing to libraries and/or symbol names. Non-traced libraries and symbols will have the regular resolver processing, with the expected plt update.
"Get it in" deraadt
|
#
1.18 |
|
08-May-2013 |
guenther |
Implement symbol caching and RELACOUNT/RELCOUNT optimizations. Much assistance and testing by miod
ok miod@
|
#
1.17 |
|
29-Mar-2013 |
miod |
Enable lazy binding by default.
|
#
1.16 |
|
26-Mar-2013 |
miod |
SH is a RelA architecture, not a Rel one. Fix _dl_bind() and lazy gotplt relocation to correctly process RelA entries. This allows lazy binding to work so far; not enabled yet, must survive some serious churning first.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.15 |
|
06-Apr-2011 |
miod |
Avoid using NULL in non-pointer contexts: use 0 for integer values and '\0' for chars.
|
Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
|
#
1.14 |
|
02-May-2010 |
guenther |
Combine the signal mask handling into _dl_thread_bind_lock(), as it's MI.
ok drahn@
|
Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
|
#
1.13 |
|
24-Jul-2008 |
guenther |
release the bind lock before resetting the signal mask
ok kurt@
|
#
1.12 |
|
27-Jun-2008 |
miod |
Remove again the old _dl_md_reloc() calls-through-plt workaround: it is no longer necessary now that libgcc is built correctly, and it caused the elfbug regress test to fail.
|
#
1.11 |
|
09-Apr-2008 |
kurt |
Improve support for shared libs linked at non-zero addreses: - rename private values in struct elf_object to better describe their meaning: s/load_offs/obj_base/ "object's address '0' base" s/load_addr/load_base/ "The base address of the loadable segments" - gdb needs the obj_base value so swap positions with load_base in struct elf_object - fix a few occurrences of where load_base was used instead of obj_base.
With help and okay drahn@
|
Revision tags: OPENBSD_4_3_BASE
|
#
1.10 |
|
24-Feb-2008 |
drahn |
Use rounded down address when changing memory protections on the GOT, such that we don't accidentally touch the page after the GOT.
Bug found on sparc64 affected other platforms as well.
ok kettenis@
|
#
1.9 |
|
27-Nov-2007 |
miod |
Make _dl_md_reloc_got() report errors, and take them into account. Fixes PR #5579.
|
Revision tags: OPENBSD_4_2_BASE
|
#
1.8 |
|
05-May-2007 |
drahn |
Provide hook so that rthreads can provide a spinlock to protect from races in lazy binding. ok art@, kurt@
|
Revision tags: OPENBSD_4_1_BASE
|
#
1.7 |
|
07-Mar-2007 |
drahn |
Put the workaround back in because gcc fails to build otherwise. ok deraadt@
|
#
1.6 |
|
06-Mar-2007 |
drahn |
Revert a workaround that was put in for softfpu ABI violations, hardfp doesnt. ok miod.
|
#
1.5 |
|
03-Feb-2007 |
drahn |
Kludge around a horrible problem where gcc 'knows' that __udivsi3 will only clobber r0 and r4, and will not modify any other registers. Unfortunately calling thru the PLT clobbers other registers eg, r1, which then breaks because gcc doesn't reload the proper value.
|
#
1.4 |
|
11-Nov-2006 |
drahn |
remove '#if 0' block.
|
#
1.3 |
|
10-Nov-2006 |
drahn |
better...
|
#
1.2 |
|
10-Nov-2006 |
drahn |
Getting much closer.
|
#
1.1 |
|
10-Nov-2006 |
drahn |
Not quite working ld.so support for sh
|
Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
|
#
1.25 |
|
24-Jan-2017 |
guenther |
On fatal errors, kill ourselves with thrkill(0,9,NULL) instead of simply exiting, via helper functions _dl_die(), _dl_diedie(), and _dl_oom().
prompted by a complaint from jsing@ ok jsing@ deraadt@
|
Revision tags: OPENBSD_6_0_BASE
|
#
1.24 |
|
21-Jun-2016 |
deraadt |
When handling DT_TEXTREL only set the mapping to READ+WRITE, ignore possible EXEC permission for the section, because the proper permission is set late, and there are no thread concerns here. Avoids W^X issues in oddball cases. ok guenther kettenis
|
Revision tags: OPENBSD_5_9_BASE
|
#
1.23 |
|
02-Nov-2015 |
guenther |
Factor out the logic for mprotecting the memory between two symbols into a new MI routine _dl_protect_segment(), and use that for protecting the GOT and--on some archs--the PLT.
Amazing testing turnaround by miod@, who apparently violated relativity to get back results on some archs as fast as he did
|
#
1.22 |
|
02-Nov-2015 |
guenther |
Fix typo: s/DT_JUMPREL/DT_JMPREL/
|
#
1.21 |
|
28-Aug-2015 |
guenther |
Use kbind for lazy binding GOT/PLT updates on sh (i.e. landisk)
Much discussion with and assistance from miod and deraadt ok deraadt@
|
Revision tags: OPENBSD_5_4_BASE OPENBSD_5_5_BASE OPENBSD_5_6_BASE OPENBSD_5_7_BASE OPENBSD_5_8_BASE
|
#
1.20 |
|
13-Jun-2013 |
brad |
Appease LLVM warning..
error: indirection of non-volatile null pointer will be deleted, not trap [-Werror,-Wnull-dereference]
Suggestion from matthew@ Ok matthew@ miod@
|
#
1.19 |
|
01-Jun-2013 |
miod |
Introduce ltrace(1). This tool works with ld.so to inject utrace record for each plt call, allowing to trace a binary linked against shared library at the public function call level.
To do so, ltrace(1) sets up some environment variables to enable plt tracing in ld.so, and invokes ktrace(2) for utrace events. ld.so will force lazy binding and will send an utrace record in the plt resolver, without updating the plt.
Minimal filtering capabilities are provided, inspired by Solaris' truss -u, to limit tracing to libraries and/or symbol names. Non-traced libraries and symbols will have the regular resolver processing, with the expected plt update.
"Get it in" deraadt
|
#
1.18 |
|
08-May-2013 |
guenther |
Implement symbol caching and RELACOUNT/RELCOUNT optimizations. Much assistance and testing by miod
ok miod@
|
#
1.17 |
|
29-Mar-2013 |
miod |
Enable lazy binding by default.
|
#
1.16 |
|
26-Mar-2013 |
miod |
SH is a RelA architecture, not a Rel one. Fix _dl_bind() and lazy gotplt relocation to correctly process RelA entries. This allows lazy binding to work so far; not enabled yet, must survive some serious churning first.
|
Revision tags: OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
|
#
1.15 |
|
06-Apr-2011 |
miod |
Avoid using NULL in non-pointer contexts: use 0 for integer values and '\0' for chars.
|
Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
|
#
1.14 |
|
02-May-2010 |
guenther |
Combine the signal mask handling into _dl_thread_bind_lock(), as it's MI.
ok drahn@
|
Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
|
#
1.13 |
|
24-Jul-2008 |
guenther |
release the bind lock before resetting the signal mask
ok kurt@
|
#
1.12 |
|
27-Jun-2008 |
miod |
Remove again the old _dl_md_reloc() calls-through-plt workaround: it is no longer necessary now that libgcc is built correctly, and it caused the elfbug regress test to fail.
|
#
1.11 |
|
09-Apr-2008 |
kurt |
Improve support for shared libs linked at non-zero addreses: - rename private values in struct elf_object to better describe their meaning: s/load_offs/obj_base/ "object's address '0' base" s/load_addr/load_base/ "The base address of the loadable segments" - gdb needs the obj_base value so swap positions with load_base in struct elf_object - fix a few occurrences of where load_base was used instead of obj_base.
With help and okay drahn@
|
Revision tags: OPENBSD_4_3_BASE
|
#
1.10 |
|
24-Feb-2008 |
drahn |
Use rounded down address when changing memory protections on the GOT, such that we don't accidentally touch the page after the GOT.
Bug found on sparc64 affected other platforms as well.
ok kettenis@
|
#
1.9 |
|
27-Nov-2007 |
miod |
Make _dl_md_reloc_got() report errors, and take them into account. Fixes PR #5579.
|
Revision tags: OPENBSD_4_2_BASE
|
#
1.8 |
|
05-May-2007 |
drahn |
Provide hook so that rthreads can provide a spinlock to protect from races in lazy binding. ok art@, kurt@
|
Revision tags: OPENBSD_4_1_BASE
|
#
1.7 |
|
07-Mar-2007 |
drahn |
Put the workaround back in because gcc fails to build otherwise. ok deraadt@
|
#
1.6 |
|
06-Mar-2007 |
drahn |
Revert a workaround that was put in for softfpu ABI violations, hardfp doesnt. ok miod.
|
#
1.5 |
|
03-Feb-2007 |
drahn |
Kludge around a horrible problem where gcc 'knows' that __udivsi3 will only clobber r0 and r4, and will not modify any other registers. Unfortunately calling thru the PLT clobbers other registers eg, r1, which then breaks because gcc doesn't reload the proper value.
|
#
1.4 |
|
11-Nov-2006 |
drahn |
remove '#if 0' block.
|
#
1.3 |
|
10-Nov-2006 |
drahn |
better...
|
#
1.2 |
|
10-Nov-2006 |
drahn |
Getting much closer.
|
#
1.1 |
|
10-Nov-2006 |
drahn |
Not quite working ld.so support for sh
|