| History log of /src/tests/libexec/ld.elf_so/Makefile |
| Revision | | Date | Author | Comments |
| 1.36 |
| 16-Jul-2026 |
riastradh | t_dlclose_thread: Test recursive dlopen/dlclose too.
Simple test first:
- h_helper_recurdso dlopens h_helper_dso2 - h_helper_dso2 needs h_helper_dso1
When dlopening h_helper_recurdso, the initialization order must be:
ENTER h_helper_recurdso -> h_helper_dso1 -> h_helper_dso2 LEAVE h_helper_recurdso
For the more complex test, we have the relations:
- h_helper_recurdso2 needs h_helper_recurdso - h_helper_recurdso dlopens h_helper_dso2 - h_helper_dso2 needs h_helper_dso1
(And the finalization order must be in reverse.)
When dlopening h_helper_recurdso2, the initialization order, therefore, must be:
ENTER h_helper_recurdso -> h_helper_dso1 -> h_helper_dso2 LEAVE h_helper_recurdso h_helper_recurdso2
PR lib/59751: dlclose is not MT-safe depending on the libraries unloaded
(Really, this is about a followup bug in the fix for that issue, which broke recursive dlopen/dlclose.)
|
| 1.35 |
| 21-Dec-2025 |
riastradh | tests/libexec/ld.elf_so/t_r_rel: Make sure helper is compiled as PIE.
Otherwise this test doesn't work: the whole point is to check for relative relocations, which are only used in position-independent code.
Should fix the test on platforms that don't do PIE by default like alpha and sparc64.
PR bin/59360: ld.elf_so(8): missing RELR support
|
| 1.34 |
| 18-Dec-2025 |
riastradh | tests/libexec/ld.elf_so/Makefile: Undo recent -Wl,-Map change.
This was almost certainly a mistake in a commit that was otherwise entirely about omap4/pandaboard support:
https://mail-index.NetBSD.org/source-changes/2025/12/16/msg159556.html
The change added LDADD linker arguments of the form
-Wl,-Map foo.map
except that doesn't actually pass `-Map foo.map' through to the underlying linker -- it only passes `-Map' to the linker, and then treats `foo.map' as an extra input file for another object to link (which doesn't work because the file doesn't exist). If we want to keep this change (not sure why), then we would have to use
-Wl,-Map,foo.map
to actually pass `-Map foo.map' through to the underlying linker.
Should fix clang build failures:
aarch64--netbsd-clang: error: no such file or directory: 't_ifunc.map' --- t_ifunc.link ---
*** Failed target: t_ifunc.link *** In directory: /home/source/ab/HEAD-llvm/src/tests/libexec/ld.elf_so *** Failed commands: ${_MKTARGET_LINK} => @# " link " ld.elf_so/t_ifunc.link ${_CCLINK.${:Ut_ifunc}} ${_LDFLAGS.${:Ut_ifunc}} ${_LDSTATIC.${:Ut_ifunc}} -o ${.TARGET} ${OBJS.${:Ut_ifunc}} ${_PROGLDOPTS} ${_LDADD.${:Ut_ifunc}} => /home/builds/ab/HEAD-llvm/evbarm-aarch64/20251217070550Z-tools/bin/aarch64--netbsd-clang --sysroot=/home/builds/ab/HEAD-llvm/evbarm-aarch64/20251217070550Z-dest -Wl,--fatal-warnings -Wl,--warn-shared-textrel -Wl,-z,relro -pie -o t_ifunc.link t_ifunc.o -Wl,-rpath-link,/home/builds/ab/HEAD-llvm/evbarm-aarch64/20251217070550Z-dest/lib -L=/lib -Wl,-z,relro -Wl,-Map t_ifunc.map -Wl,-rpath,/usr/tests/libexec/ld.elf_so -lutil -latf-c ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${:Ut_ifunc}} => /home/builds/ab/HEAD-llvm/evbarm-aarch64/20251217070550Z-tools/bin/nbctfmerge -t -g -L VERSION -g -o t_ifunc.link t_ifunc.o *** [t_ifunc.link] Error code 1
|
| 1.33 |
| 17-Dec-2025 |
riastradh | tests/lib/csu, tests/libexec/ld.elf_so: Apply CTFMERGE=: workaround.
The workaround for
PR toolchain/59364: ctf tools needs update
required an update after fixing
PR toolchain/57241: mips64el--netbsd-install core dumps randomly
by splitting the recipes for ${PROG} and ${PROG}.debug into an intermediate ${PROG}.link to avoid overwriting ${PROG} inside the recipe for ${PROG}.debug.
This is kludgey (writing the `.link' suffix into a Makefile isn't great) but I see only two cases of it so this'll do for now.
|
| 1.32 |
| 16-Dec-2025 |
skrll | Pandaboard work from Rui-Xiang Guo via port-arm with updates from me.
https://github.com/picohive/netbsd-pandaboard
|
| 1.31 |
| 14-Dec-2025 |
riastradh | dl_addr(3): Add some automatic tests.
XXX Should also test the libc stubs, maybe move this into tests/lib/libc/dlfcn and test both static and (for MKPIC=yes) dynamic, but this'll do for now.
PR lib/59567: dladdr(3) doesn't work properly especially when main executable is loaded at high memory address
|
| 1.30 |
| 06-Dec-2025 |
skrll | Add a testcase for PR/59652.
|
| 1.29 |
| 23-Nov-2025 |
riastradh | ld.elf_so(1): Test concurrent dlopen/dlclose.
PR lib/59751: dlclose is not MT-safe depending on the libraries unloaded
|
| 1.28 |
| 10-Jun-2025 |
christos | branches: 1.28.2; centralize pack-relative-relocs handling
|
| 1.27 |
| 02-May-2025 |
riastradh | ld.elf_so: Add a trivial test for R_*_RELATIVE relocations.
PR bin/59360: ld.elf_so(8): missing RELR support
|
| 1.26 |
| 27-Apr-2025 |
riastradh | tests/libexec/ld.elf_so/Makefile: Sort.
Preparation for:
PR bin/59360: ld.elf_so(8): missing RELR support
|
| 1.25 |
| 16-Apr-2025 |
riastradh | t_rtld_r_debug: Test this as a non-PIE executable too.
On MIPS, non-PIEs can use DT_MIPS_RLD_MAP or DT_MIPS_RLD_MAP_REL, while PIEs can't use DT_MIPS_RLD_MAP because it relies on an absolute virtual address baked into the file. So it's important to test both.
PR port-mips/59296: t_rtld_r_debug test is failing
|
| 1.24 |
| 22-Jul-2024 |
riastradh | tests/libexec/ld.elf_so/t_ifunc: Handle MKRELRO=no harder.
Don't even pass -Wl,-z,norelro if MKRELRO=no, because the toolchain's ld(1) might not support relro _or_ norelro.
Should resolve, e.g.:
/home/builds/ab/HEAD-llvm/evbarm-earmv7hf/202407182350Z-tools/bin/armv7--netbsdelf-eabihf-ld: warning: -z norelro ignored armv7--netbsdelf-eabihf-clang: error: linker command failed with exit code 1 (use -v to see invocation) --- t_ifunc_norelro --- *** Failed target: t_ifunc_norelro *** In directory: /home/source/ab/HEAD-llvm/src/tests/libexec/ld.elf_so *** Failed commands: ${_MKTARGET_LINK} ...
|
| 1.23 |
| 16-Jul-2024 |
riastradh | tests/libexec/ld.elf_so/t_ifunc: Handle MKRELRO=no.
Just build t_ifunc and t_ifunc_now normally. If they wind up being built with the same options as t_ifunc_norelro and t_ifunc_norelro_now, so be it; easier to do it this way than to put more conditionals into set lists.
Should resolve, e.g.:
/home/builds/ab/HEAD-llvm/evbarm-earmv7hf/202407141900Z-tools/bin/armv7--netbsdelf-eabihf-ld: warning: -z relro ignored armv7--netbsdelf-eabihf-clang: error: linker command failed with exit code 1 (use -v to see invocation) --- t_ifunc --- *** Failed target: t_ifunc *** In directory: /home/source/ab/HEAD-llvm/src/tests/libexec/ld.elf_so *** Failed commands: ${_MKTARGET_LINK} => @# " link " ld.elf_so/t_ifunc ${_CCLINK.${:Ut_ifunc}} ${_LDFLAGS.${:Ut_ifunc}} ${_LDSTATIC.${:Ut_ifunc}} -o ${.TARGET} ${OBJS.${:Ut_ifunc}} ${_PROGLDOPTS} ${_LDADD.${:Ut_ifunc}} => /home/builds/ab/HEAD-llvm/evbarm-earmv7hf/202407141900Z-tools/bin/armv7--netbsdelf-eabihf-clang --sysroot=/home/builds/ab/HEAD-llvm/evbarm-earmv7hf/202407141900Z-dest -Wl,--fatal-warnings -Wl,--warn-shared-textrel -pie -o t_ifunc t_ifunc.o -Wl,-rpath-link,/home/builds/ab/HEAD-llvm/evbarm-earmv7hf/202407141900Z-dest/lib -L=/lib -Wl,-z,relro -Wl,-rpath,/usr/tests/libexec/ld.elf_so -lutil -latf-c ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${:Ut_ifunc}} => /home/builds/ab/HEAD-llvm/evbarm-earmv7hf/202407141900Z-tools/bin/nbctfmerge -t -g -L VERSION -g -o t_ifunc t_ifunc.o
|
| 1.22 |
| 07-Jul-2024 |
riastradh | t_ifunc: Test with all combinations of {relro, bindnow}.
PR lib/57792
|
| 1.21 |
| 30-Jul-2023 |
riastradh | branches: 1.21.2; ld.elf_so: Add some known-answer tests for hash functions.
Make sure the testing mechanism detects the traditional overflow bug.
|
| 1.20 |
| 03-Jun-2023 |
lukem | adapt to ${CC_WNO_MAYBE_UNINITIALIZED}
Use ${CC_WNO_MAYBE_UNINITIALIZED} instead of the older style more complex expressions.
Remove workarounds if they were for a specific version of gcc < 10.
|
| 1.19 |
| 02-Jun-2023 |
riastradh | ld.elf_so: Test dynamic-then-static abuse via ctor.
XXX pullup-10
|
| 1.18 |
| 02-Jun-2023 |
riastradh | ld.elf_so: Test another edge case of mismatched TLS models.
One library defines a symbol and _doesn't_ use it, so it has no indication of whether the symbol is for static TLS or dynamic TLS, and then two other libraries use it in different ways.
XXX pullup-10
|
| 1.17 |
| 01-Jun-2023 |
riastradh | ld.elf_so: Test TLS abuse of static def, dynamic use and vice versa.
XXX pullup-10
|
| 1.16 |
| 01-Jun-2023 |
riastradh | ld.elf_so: Test extern dynamic TLS too.
XXX pullup-10
|
| 1.15 |
| 31-May-2023 |
riastradh | ld.elf_so: Nix inadvertently committed private test program.
|
| 1.14 |
| 31-May-2023 |
riastradh | ld.elf_so: Fix extern TLS test to match PR toolchain/50277.
Now it's actually testing the problem.
|
| 1.13 |
| 31-May-2023 |
riastradh | ld.elf_so: New test for extern initial-exec TLS, PR toolchain/50277.
XXX pullup-10
|
| 1.12 |
| 30-May-2021 |
joerg | branches: 1.12.4; Drop explicit -msecure-plt, it's the default for both clang and gcc.
|
| 1.11 |
| 22-Sep-2020 |
kamil | branches: 1.11.2; Add new RTLD test file for r_debug
New tests: - self - dlopen
Both check whether the r_debug structure seems to be well-formed, without and with a dlopen(3) call.
|
| 1.10 |
| 14-May-2019 |
christos | branches: 1.10.2; clang ifunc's on powerpc require secure-plt.
|
| 1.9 |
| 11-Jul-2017 |
joerg | branches: 1.9.6; Implement __cxa_thread_atexit and __cxa_thread_atexit_impl. This functions are used for destructors of thread_local objects.
If a pending destructor exists, prevent unloading of shared objects. Introduce __dl_cxa_refcount interface for this purpose. When the last reference is gone and the object has been dlclose'd before, the unloading is finalized.
Ideally, __cxa_thread_atexit_impl wouldn't exist, but libstdc++ insists on providing __cxa_thread_atexit as direct wrapper without further patching.
|
| 1.8 |
| 25-Aug-2014 |
joerg | branches: 1.8.8; 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.
|
| 1.7 |
| 03-Jul-2011 |
mrg | avoid building stuff that depends upon pic objects if MKPIC == no.
|
| 1.6 |
| 03-Jul-2011 |
mrg | only build the ld.elf_so tests if MKPIC != no.
|
| 1.5 |
| 25-Jun-2011 |
nonaka | PR/45015: ld.elf_so: support ELF symbol versioning Applied latest patch.
|
| 1.4 |
| 31-Mar-2011 |
joerg | Add initial regression test for ld.elf_so locking.
|
| 1.3 |
| 24-Dec-2010 |
skrll | Add support for DF_1_BIND_NOW, DF_1_NODELETE and DF_1_NOOPEN marked objects, and the RTLD_NODELETE and RTLD_NOLOAD flags to dlopen(3).
Mark libpthread as DF_1_NOOPEN and use it to test the functionality.
Somewhat taken from FreeBSD.
Fixes PR 42029.
OK from christos and joerg.
|
| 1.2 |
| 14-Dec-2010 |
skrll | Convert a couple of old regress tests to ATF.
Remove the regress/usr.bin/rtld/dlopen/dlopen.c test as well as it's covered by existing ATF test(s).
|
| 1.1 |
| 24-Sep-2009 |
pooka | add regression tests for dlinfo()
|
| 1.8.8.2 |
| 09-Aug-2023 |
martin | Pull up following revision(s) (requested by riastradh in ticket #1886):
distrib/sets/lists/debug/mi 1.409 (patch) distrib/sets/lists/tests/mi 1.1280 (patch) libexec/ld.elf_so/Makefile 1.145-1.147 (patch) libexec/ld.elf_so/hash.c 1.1 libexec/ld.elf_so/hash.h 1.1 libexec/ld.elf_so/reloc.c 1.118 (patch) libexec/ld.elf_so/rtld.c 1.215 (patch) libexec/ld.elf_so/rtld.h 1.145,1.147 (patch) libexec/ld.elf_so/symbol.c 1.74-1.76 (patch) tests/libexec/ld.elf_so/Makefile 1.21 (patch) tests/libexec/ld.elf_so/t_hash.c 1.1
The SysV ABI specifies that the symbol hash function should return only 32 bits of hash. Unfortunately due to an implementation bu and the fact that the return type is unsigned long which is 64 bits in LP64, this can fail in some cases: "\xff\x0f\x0f\x0f\x0f\x0f\x12". See: https://maskray.me/blog/2023-04-12-elf-hash-function
From Ed Maste @ FreeBSD: https://cgit.freebsd.org/src/commit/?id=29e3a06510823edbb91667d21f530d3ec778116d
Need to write Unit Tests for this.
Oops wrong mask.
ld.elf_so: Split SRCS onto multiple lines. Makes updates easier. No functional change intended.
ld.elf_so: Sort SRCS. No functional change intended.
ld.elf_so: Split hash functions into a separate file. This way we can test them in isolation. No functional change intended.
ld.elf_so: Add some known-answer tests for hash functions.
Make sure the testing mechanism detects the traditional overflow bug.
|
| 1.8.8.1 |
| 29-Aug-2017 |
bouyer | Pull up following revision(s) (requested by joerg in ticket #127): tests/libexec/ld.elf_so/h_thread_local_dtor.c: revision 1.1 external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6/c++config.h: revision 1.14 external/gpl3/gcc/lib/libstdc++-v3/arch/earmeb/c++config.h: revision 1.17 lib/libc/stdlib/atexit.h: file removal lib/libc/stdlib/exit.c: revision 1.16 external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc64/c++config.h: revision 1.8 lib/libc/stdlib/exit.c: revision 1.17 external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hf/c++config.h: revision 1.14 distrib/sets/lists/debug/shl.mi: revision 1.178 external/gpl3/gcc/lib/libstdc++-v3/arch/sh3el/c++config.h: revision 1.21 distrib/sets/lists/debug/shl.mi: revision 1.179 distrib/sets/lists/debug/mi: revision 1.219 lib/libpthread/pthread.c: revision 1.150 external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7/c++config.h: revision 1.14 libexec/ld.elf_so/symbols.map: revision 1.2 include/dlfcn.h: revision 1.25 external/gpl3/gcc/lib/libstdc++-v3/arch/arm/c++config.h: revision 1.21 external/gpl3/gcc/lib/libstdc++-v3/arch/x86_64/c++config.h: revision 1.23 external/gpl3/gcc/lib/libstdc++-v3/arch/mips64el/c++config.h: revision 1.18 external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4eb/c++config.h: revision 1.14 external/gpl3/gcc/lib/libstdc++-v3/arch/earm/c++config.h: revision 1.19 external/gpl3/gcc/lib/libstdc++-v3/arch/mipsel/c++config.h: revision 1.19 external/gpl3/gcc/lib/libstdc++-v3/arch/ia64/c++config.h: revision 1.5 external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6eb/c++config.h: revision 1.14 external/gpl3/gcc/lib/libstdc++-v3/arch/earmhf/c++config.h: revision 1.17 distrib/sets/lists/tests/mi: revision 1.755 external/gpl3/gcc/lib/libstdc++-v3/arch/mips64eb/c++config.h: revision 1.19 external/gpl3/gcc/lib/libstdc++-v3/arch/i386/c++config.h: revision 1.20 external/gpl3/gcc/lib/libstdc++-v3/arch/vax/c++config.h: revision 1.21 external/gpl3/gcc/lib/libstdc++-v3/arch/armeb/c++config.h: revision 1.21 external/gpl3/gcc/lib/libstdc++-v3/arch/sparc/c++config.h: revision 1.20 lib/libc/dlfcn/dlfcn_elf.c: revision 1.14 tests/libexec/ld.elf_so/t_thread_local_dtor.sh: revision 1.1 tests/lib/libpthread/t_thread_local_dtor.sh: revision 1.1 lib/libc/stdlib/Makefile.inc: revision 1.93 lib/libc/include/atexit.h: revision 1.1 lib/libc/include/atexit.h: revision 1.2 external/gpl3/gcc/lib/libstdc++-v3/arch/m68k/c++config.h: revision 1.19 external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hf/c++config.h: revision 1.14 distrib/sets/lists/debug/shl.mi: revision 1.180 external/gpl3/gcc/lib/libstdc++-v3/arch/sparc64/c++config.h: revision 1.19 external/gpl3/gcc/lib/libstdc++-v3/arch/earmv6hfeb/c++config.h: revision 1.14 external/gpl3/gcc/lib/libstdc++-v3/arch/hppa/c++config.h: revision 1.19 external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7hfeb/c++config.h: revision 1.14 lib/libc/stdlib/cxa_thread_atexit.c: revision 1.1 tests/libexec/ld.elf_so/helper_dso3/h_helper_dso3.cpp: revision 1.1 tests/libexec/ld.elf_so/helper_dso3/Makefile: revision 1.1 external/gpl3/gcc/lib/libstdc++-v3/arch/riscv64/c++config.h: revision 1.5 libexec/ld.elf_so/rtld.c: revision 1.185 external/gpl3/gcc/lib/libstdc++-v3/arch/sh3eb/c++config.h: revision 1.19 external/gpl3/gcc/lib/libstdc++-v3/arch/riscv32/c++config.h: revision 1.5 external/gpl3/gcc/lib/libstdc++-v3/arch/m68000/c++config.h: revision 1.15 external/gpl3/gcc/lib/libstdc++-v3/arch/mipseb/c++config.h: revision 1.21 external/gpl3/gcc/lib/libstdc++-v3/arch/coldfire/c++config.h: revision 1.12 external/gpl3/gcc/lib/libstdc++-v3/arch/earmv4/c++config.h: revision 1.14 external/gpl3/gcc/lib/libstdc++-v3/arch/earmhfeb/c++config.h: revision 1.15 external/gpl3/gcc/lib/libstdc++-v3/arch/alpha/c++config.h: revision 1.19 tests/libexec/ld.elf_so/Makefile: revision 1.9 external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc/c++config.h: revision 1.20 external/gpl3/gcc/lib/libstdc++-v3/arch/earmv7eb/c++config.h: revision 1.14 tests/lib/libpthread/h_thread_local_dtor.cpp: revision 1.1 distrib/sets/lists/tests/shl.mi: revision 1.11 tests/lib/libpthread/Makefile: revision 1.13 libexec/ld.elf_so/rtld.h: revision 1.129 external/gpl3/gcc/lib/libstdc++-v3/arch/or1k/c++config.h: revision 1.6 Implement __cxa_thread_atexit and __cxa_thread_atexit_impl. This functions are used for destructors of thread_local objects. If a pending destructor exists, prevent unloading of shared objects. Introduce __dl_cxa_refcount interface for this purpose. When the last reference is gone and the object has been dlclose'd before, the unloading is finalized. Ideally, __cxa_thread_atexit_impl wouldn't exist, but libstdc++ insists on providing __cxa_thread_atexit as direct wrapper without further patching. Fix filename of new debug file Add misising DEBUGLIB file Avoid common declaration. Drop TLS variant checks, emutls is enough for VAX and Sun2.
|
| 1.9.6.1 |
| 10-Jun-2019 |
christos | Sync with HEAD
|
| 1.10.2.3 |
| 27-Jun-2026 |
martin | Pull up following revision(s) (requested by riastradh in ticket #2021):
distrib/sets/lists/tests/mi: revision 1.1404 libexec/ld.elf_so/headers.c: revision 1.76 tests/libexec/ld.elf_so/t_dladdr.c: revision 1.1 tests/libexec/ld.elf_so/t_dladdr.c: revision 1.2 tests/libexec/ld.elf_so/Makefile: revision 1.31 distrib/sets/lists/debug/mi: revision 1.493
dl_addr(3): Add some automatic tests.
XXX Should also test the libc stubs, maybe move this into tests/lib/libc/dlfcn and test both static and (for MKPIC=yes) dynamic, but this'll do for now. PR lib/59567: dladdr(3) doesn't work properly especially when main executable is loaded at high memory address
dladdr(3): Fix determination of object address intervals.
This appears to have been broken in rev. 1.62 back in 2017 with a change to compute the largest distance from the first LOAD segment's starting address to the maximum address of any LOAD segment -- we started by finding the distance from _zero_ to the maximum address of the first LOAD segment because we subtracted obj->vaddrbase which wasn't initialized yet, so we would overshoot obj->mapsize and obj->textsize by whatever the value of obj->vaddrbase turned out to be.
XXX The commit message for 1.62 suggests we are dropping the assumption that the LOAD segments appear in order. But it looks to me like we still assume the _first_ load segment has the lowest virtual address, because we keep it as obj->vaddrbase/obj->mapbase and use it as a reference point for measuring the size of an object by subtracting it from each load segment's maximum address. Is the original assumption that LOAD segments appear in order valid after all, or do we need to do extra work here to handle objects whose LOAD segments are so much out of order that the first LOAD segment isn't lowest in virtual address space? Unclear!
Might help with wine.
Based on a patch by Akihiro Sagawa, thanks! PR lib/59567: dladdr(3) doesn't work properly especially when main executable is loaded at high memory address
|
| 1.10.2.2 |
| 11-Aug-2023 |
sborrill | Pull up the following revisions(s) (requested by riastradh in ticket #1712): distrib/sets/lists/debug/mi: revision 1.409 via patch distrib/sets/lists/tests/mi: revision 1.1280 via patch libexec/ld.elf_so/Makefile: revision 1.145-1.147 via patch libexec/ld.elf_so/hash.c: revision 1.1 via patch libexec/ld.elf_so/hash.h: revision 1.1 via patch libexec/ld.elf_so/symbol.c: revision 1.74-1.76 via patch tests/libexec/ld.elf_so/Makefile: revision 1.21 via patch tests/libexec/ld.elf_so/t_hash.c: revision 1.1 via patch
ld.elf_so: Fix sysv elf hash on edge cases like `ZZZZZW9p' on LP64 platforms where long is 64-bit.
|
| 1.10.2.1 |
| 04-Aug-2023 |
martin | Pull up following revision(s), all via patch, (requested by riastradh in ticket #1699):
distrib/sets/lists/tests/shl.mi: revision 1.14 distrib/sets/lists/tests/shl.mi: revision 1.15 distrib/sets/lists/tests/shl.mi: revision 1.16 tests/libexec/ld.elf_so/helper_def_static/h_def_static.c: revision 1.1 tests/libexec/ld.elf_so/helper_def_dynamic/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_def_dynamic/Makefile: revision 1.2 tests/libexec/ld.elf_so/helper_onlyuse_static/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_onlyuse_static/Makefile: revision 1.2 libexec/ld.elf_so/arch/mips/mips_reloc.c: revision 1.75 distrib/sets/lists/tests/mi: revision 1.1265 libexec/ld.elf_so/arch/sh3/mdreloc.c: revision 1.36 libexec/ld.elf_so/rtld.c: revision 1.214 tests/libexec/ld.elf_so/helper_onlydef_static/Makefile: revision 1.1 distrib/sets/lists/debug/mi: revision 1.400 tests/libexec/ld.elf_so/helper_onlydef_static/Makefile: revision 1.2 distrib/sets/lists/debug/mi: revision 1.401 distrib/sets/lists/debug/mi: revision 1.402 tests/libexec/ld.elf_so/helper_dso2/Makefile: revision 1.2 distrib/sets/lists/debug/mi: revision 1.403 tests/libexec/ld.elf_so/helper_symver_dso0/Makefile: revision 1.2 libexec/ld.elf_so/arch/x86_64/mdreloc.c: revision 1.48 distrib/sets/lists/debug/mi: revision 1.406 tests/libexec/ld.elf_so/helper_use_dynamic/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_use_dynamic/Makefile: revision 1.2 tests/libexec/ld.elf_so/helper_ifunc_dso/Makefile: revision 1.2 libexec/ld.elf_so/arch/sparc64/mdreloc.c: revision 1.70 libexec/ld.elf_so/arch/aarch64/mdreloc.c: revision 1.18 tests/libexec/ld.elf_so/helper_abuse_dynamic/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_abuse_dynamic/Makefile: revision 1.2 tests/libexec/ld.elf_so/Makefile: revision 1.13 libexec/ld.elf_so/arch/arm/mdreloc.c: revision 1.46 libexec/ld.elf_so/rtld.h: revision 1.146 tests/libexec/ld.elf_so/Makefile: revision 1.14 distrib/sets/lists/debug/shl.mi: revision 1.306 tests/libexec/ld.elf_so/Makefile: revision 1.15 tests/libexec/ld.elf_so/helper_abuse_static/Makefile: revision 1.1 distrib/sets/lists/debug/shl.mi: revision 1.307 tests/libexec/ld.elf_so/Makefile: revision 1.16 tests/libexec/ld.elf_so/helper_abuse_static/Makefile: revision 1.2 distrib/sets/lists/debug/shl.mi: revision 1.308 tests/libexec/ld.elf_so/Makefile: revision 1.17 distrib/sets/lists/debug/shl.mi: revision 1.309 tests/libexec/ld.elf_so/Makefile: revision 1.18 tests/libexec/ld.elf_so/Makefile: revision 1.19 libexec/ld.elf_so/tls.c: revision 1.16 libexec/ld.elf_so/tls.c: revision 1.17 libexec/ld.elf_so/tls.c: revision 1.18 libexec/ld.elf_so/tls.c: revision 1.19 tests/libexec/ld.elf_so/helper_onlydef_static/h_onlydef_static.c: revision 1.1 tests/libexec/ld.elf_so/helper_use_static/h_use_static.c: revision 1.1 tests/libexec/ld.elf_so/helper_use_static/h_use_static.c: revision 1.2 tests/libexec/ld.elf_so/helper_def_static/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_def_static/Makefile: revision 1.2 libexec/ld.elf_so/arch/hppa/hppa_reloc.c: revision 1.50 distrib/sets/lists/debug/shl.mi: revision 1.310 libexec/ld.elf_so/README.TLS: revision 1.6 distrib/sets/lists/debug/shl.mi: revision 1.311 distrib/sets/lists/debug/shl.mi: revision 1.314 tests/libexec/ld.elf_so/helper_dso3/Makefile: revision 1.2 tests/libexec/ld.elf_so/helper_symver_dso1/Makefile: revision 1.4 libexec/ld.elf_so/arch/powerpc/ppc_reloc.c: revision 1.63 tests/libexec/ld.elf_so/helper_def_dynamic/h_def_dynamic.c: revision 1.1 tests/libexec/ld.elf_so/helper_onlydef/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_onlydef/Makefile: revision 1.2 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.10 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.11 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.12 libexec/ld.elf_so/map_object.c: revision 1.66 tests/libexec/ld.elf_so/helper.mk: revision 1.1 libexec/ld.elf_so/arch/sparc/mdreloc.c: revision 1.57 libexec/ld.elf_so/map_object.c: revision 1.67 tests/libexec/ld.elf_so/helper_onlydef/h_onlydef.c: revision 1.1 tests/libexec/ld.elf_so/helper_symver_dso2/Makefile: revision 1.4 tests/libexec/ld.elf_so/helper_use_static/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_use_static/Makefile: revision 1.2 tests/libexec/ld.elf_so/helper_use_static/Makefile: revision 1.3 tests/libexec/ld.elf_so/helper_use_dynamic/h_use_dynamic.c: revision 1.1 tests/libexec/ld.elf_so/helper_abuse_static/h_abuse_static.c: revision 1.1 libexec/ld.elf_so/arch/riscv/mdreloc.c: revision 1.9 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.1 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.2 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.3 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.4 tests/libexec/ld.elf_so/helper_onlyctor_dynamic/Makefile: revision 1.1 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.5 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.6 libexec/ld.elf_so/arch/m68k/mdreloc.c: revision 1.34 tests/libexec/ld.elf_so/helper_onlyctor_dynamic/Makefile: revision 1.2 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.7 libexec/ld.elf_so/arch/i386/mdreloc.c: revision 1.42 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.8 libexec/ld.elf_so/arch/i386/mdreloc.c: revision 1.43 libexec/ld.elf_so/arch/or1k/mdreloc.c: revision 1.4 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.9 tests/libexec/ld.elf_so/helper_onlyuse_dynamic/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_onlyuse_dynamic/Makefile: revision 1.2 tests/libexec/ld.elf_so/helper_abuse_dynamic/h_abuse_dynamic.c: revision 1.1 tests/libexec/ld.elf_so/helper_onlyctor_dynamic/h_onlyctor_dynamic.c: revision 1.1 tests/libexec/ld.elf_so/helper_onlyuse_static/h_onlyuse_static.c: revision 1.1 tests/libexec/ld.elf_so/helper_onlyuse_dynamic/h_onlyuse_dynamic.c: revision 1.1 tests/libexec/ld.elf_so/helper_dso1/Makefile: revision 1.2 distrib/sets/lists/tests/shl.mi: revision 1.12 distrib/sets/lists/tests/shl.mi: revision 1.13 libexec/ld.elf_so/arch/alpha/alpha_reloc.c: revision 1.44
ld.elf_so: New test for extern initial-exec TLS, PR toolchain/50277.
ld.elf_so: Fix extern TLS test to match PR toolchain/50277. Now it's actually testing the problem. ld.elf_so: Nix inadvertently committed private test program. ld.elf_so: Fix set lists for MKDEBUG=yes builds with t_tls_extern.
ld.elf_so: Sprinkle tls debug messages.
ld.elf_so: Make tls alloc debug messages more detailed and greppable.
ld.elf_so: Test variations on PR toolchain/50277.
ld.elf_so: Test extern dynamic TLS too.
ld.elf_so: Factor out logic in TLS tests to make writing more easier. No functional change intended.
ld.elf_so: Test TLS abuse of static def, dynamic use and vice versa.
ld.elf_so: Shorter test names. No functional non-cosmetic change intended.
ld.elf_so: Separately test eager and lazy resolution of def tls ptr. eager: before loading use library lazy: after loading use library
Add recent ld.elf_so test helpers debug info ld.elf_so: Add new files to debug/shl.mi.
ld.elf_so: tls_extern dynamic_defabuse_eager must xfail differently. If a symbol has already been resolved as dynamic TLS, any library that tries to use it as static TLS cannot be dlopened.
ld.elf_so: Test another edge case of mismatched TLS models. One library defines a symbol and _doesn't_ use it, so it has no indication of whether the symbol is for static TLS or dynamic TLS, and then two other libraries use it in different ways.
ld.elf_so: Test dynamic-then-static abuse via ctor.
ld.elf_so: Fix missing tab in debug/shl.mi in last change.
Fix interactions of initial-exec TLS model and dlopen
(1) If an initial-exec relocation was used for a non-local symbol (i.e. the definition of the symbol is in a different DSO), the computation of the static TLS offset used the wrong DSO.
This would effectively mean the wrong address was computed (PR toolchain/50277, PR pkg/57445). Fix this by forcing the computation of the correct DSO (the one defining the symbol). This code uses __UNCONST to avoid the vast interface changes for this special case.
(2) If symbols from a DSO loaded via dlopen are used with both global-dynamic/local-dynamic and initial-exec relocations AND a initial-exec relocation was resolved first in a thread, a split brain situation could exist where the dynamic relocations would use one memory block (separate allocation) and the initial-exec relocations the static per-thread TLS space.
(3) If the initial-exec relocation in (2) is seen after any thread has already used a GD/LD allocation, bail out. Since IE relocations are used only in the GOT, this will prevent the dlopen. This is a bit more aggressive than necessary, but a full blown reference counting doesn't seem to be justified. Avoid using uninitialized variable "symnum" when building with DEBUG enabled by borrowing the rdbg_symname() macro from arch/x86_64. ld.elf_so: Sprinkle more debug messages on dlopen and error.
PR pkg/57445
Fix MKDEBUGLIB build by adding these installed files to the debug set list.
One could argue that these files are not of any use, so why install them? I don't have a good argument either way, and this is (for now) a simple work-around for PR bin/57455 Please feel free to commit a different fix to avoid installing these files at all.
Fix markup of libh_ MKDEBUGLIB=yes only files
TLS variant I archs need to fudge the offset by the size of the TCB. tests/libexec/ld.elf_so: Fix helper library makefiles. 1. Consolidate logic into a single helper.mk to reduce duplication. 2. Set NO* variables, not MK* variables which are reserved for user. 3. Avoid eager X!= in favour of lazy ${X:sh}. 4. Mark _g.a set list entries obsolete. Never should've been built! PR misc/57462
|
| 1.11.2.1 |
| 31-May-2021 |
cjep | sync with head
|
| 1.12.4.3 |
| 27-Jun-2026 |
martin | Pull up following revision(s) (requested by riastradh in ticket #1291):
distrib/sets/lists/tests/mi: revision 1.1404 libexec/ld.elf_so/headers.c: revision 1.76 tests/libexec/ld.elf_so/t_dladdr.c: revision 1.1 tests/libexec/ld.elf_so/t_dladdr.c: revision 1.2 tests/libexec/ld.elf_so/Makefile: revision 1.31 distrib/sets/lists/debug/mi: revision 1.493
dl_addr(3): Add some automatic tests.
XXX Should also test the libc stubs, maybe move this into tests/lib/libc/dlfcn and test both static and (for MKPIC=yes) dynamic, but this'll do for now. PR lib/59567: dladdr(3) doesn't work properly especially when main executable is loaded at high memory address
dladdr(3): Fix determination of object address intervals.
This appears to have been broken in rev. 1.62 back in 2017 with a change to compute the largest distance from the first LOAD segment's starting address to the maximum address of any LOAD segment -- we started by finding the distance from _zero_ to the maximum address of the first LOAD segment because we subtracted obj->vaddrbase which wasn't initialized yet, so we would overshoot obj->mapsize and obj->textsize by whatever the value of obj->vaddrbase turned out to be.
XXX The commit message for 1.62 suggests we are dropping the assumption that the LOAD segments appear in order. But it looks to me like we still assume the _first_ load segment has the lowest virtual address, because we keep it as obj->vaddrbase/obj->mapbase and use it as a reference point for measuring the size of an object by subtracting it from each load segment's maximum address. Is the original assumption that LOAD segments appear in order valid after all, or do we need to do extra work here to handle objects whose LOAD segments are so much out of order that the first LOAD segment isn't lowest in virtual address space? Unclear!
Might help with wine.
Based on a patch by Akihiro Sagawa, thanks! PR lib/59567: dladdr(3) doesn't work properly especially when main executable is loaded at high memory address
|
| 1.12.4.2 |
| 01-Aug-2023 |
martin | Pull up following revision(s) (requested by riastradh in ticket #300):
libexec/ld.elf_so/rtld.h: revision 1.145 libexec/ld.elf_so/symbol.c: revision 1.74 libexec/ld.elf_so/rtld.h: revision 1.147 libexec/ld.elf_so/symbol.c: revision 1.75 libexec/ld.elf_so/symbol.c: revision 1.76 tests/libexec/ld.elf_so/t_hash.c: revision 1.1 libexec/ld.elf_so/Makefile: revision 1.145 libexec/ld.elf_so/Makefile: revision 1.146 libexec/ld.elf_so/Makefile: revision 1.147 libexec/ld.elf_so/reloc.c: revision 1.118 distrib/sets/lists/tests/mi: revision 1.1280 libexec/ld.elf_so/rtld.c: revision 1.215 tests/libexec/ld.elf_so/Makefile: revision 1.21 libexec/ld.elf_so/hash.c: revision 1.1 libexec/ld.elf_so/hash.h: revision 1.1 distrib/sets/lists/debug/mi: revision 1.409
The SysV ABI specifies that the symbol hash function should return only 32 bits of hash. Unfortunately due to an implementation bug and the fact that the return type is unsigned long which is 64 bits in LP64, this can fail in some cases: "\xff\x0f\x0f\x0f\x0f\x0f\x12". See: "https://maskray.me/blog/2023-04-12-elf-hash-function From Ed Maste @ FreeBSD: https://cgit.freebsd.org/src/commit/?id=29e3a06510823edbb91667d21f530d3ec778116d
Need to write Unit Tests for this.
Oops wrong mask.
ld.elf_so: Split SRCS onto multiple lines. Makes updates easier. No functional change intended.
ld.elf_so: Sort SRCS. No functional change intended.
ld.elf_so: Split hash functions into a separate file. This way we can test them in isolation. No functional change intended.
ld.elf_so: Add some known-answer tests for hash functions.
Make sure the testing mechanism detects the traditional overflow bug.
|
| 1.12.4.1 |
| 01-Aug-2023 |
martin | Pull up following revision(s) (requested by riastradh in ticket #297):
distrib/sets/lists/tests/shl.mi: revision 1.14 distrib/sets/lists/tests/shl.mi: revision 1.15 distrib/sets/lists/tests/shl.mi: revision 1.16 tests/libexec/ld.elf_so/helper_def_static/h_def_static.c: revision 1.1 tests/libexec/ld.elf_so/helper_def_dynamic/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_def_dynamic/Makefile: revision 1.2 tests/libexec/ld.elf_so/helper_onlyuse_static/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_onlyuse_static/Makefile: revision 1.2 libexec/ld.elf_so/arch/mips/mips_reloc.c: revision 1.75 distrib/sets/lists/tests/mi: revision 1.1265 libexec/ld.elf_so/arch/sh3/mdreloc.c: revision 1.36 libexec/ld.elf_so/rtld.c: revision 1.214 tests/libexec/ld.elf_so/helper_onlydef_static/Makefile: revision 1.1 distrib/sets/lists/debug/mi: revision 1.400 tests/libexec/ld.elf_so/helper_onlydef_static/Makefile: revision 1.2 distrib/sets/lists/debug/mi: revision 1.401 distrib/sets/lists/debug/mi: revision 1.402 tests/libexec/ld.elf_so/helper_dso2/Makefile: revision 1.2 distrib/sets/lists/debug/mi: revision 1.403 tests/libexec/ld.elf_so/helper_symver_dso0/Makefile: revision 1.2 libexec/ld.elf_so/arch/x86_64/mdreloc.c: revision 1.48 distrib/sets/lists/debug/mi: revision 1.406 tests/libexec/ld.elf_so/helper_use_dynamic/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_use_dynamic/Makefile: revision 1.2 tests/libexec/ld.elf_so/helper_ifunc_dso/Makefile: revision 1.2 libexec/ld.elf_so/arch/sparc64/mdreloc.c: revision 1.70 libexec/ld.elf_so/arch/aarch64/mdreloc.c: revision 1.18 tests/libexec/ld.elf_so/helper_abuse_dynamic/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_abuse_dynamic/Makefile: revision 1.2 tests/libexec/ld.elf_so/Makefile: revision 1.13 libexec/ld.elf_so/arch/arm/mdreloc.c: revision 1.46 libexec/ld.elf_so/rtld.h: revision 1.146 tests/libexec/ld.elf_so/Makefile: revision 1.14 distrib/sets/lists/debug/shl.mi: revision 1.306 tests/libexec/ld.elf_so/Makefile: revision 1.15 tests/libexec/ld.elf_so/helper_abuse_static/Makefile: revision 1.1 distrib/sets/lists/debug/shl.mi: revision 1.307 tests/libexec/ld.elf_so/Makefile: revision 1.16 tests/libexec/ld.elf_so/helper_abuse_static/Makefile: revision 1.2 distrib/sets/lists/debug/shl.mi: revision 1.308 tests/libexec/ld.elf_so/Makefile: revision 1.17 distrib/sets/lists/debug/shl.mi: revision 1.309 tests/libexec/ld.elf_so/Makefile: revision 1.18 tests/libexec/ld.elf_so/Makefile: revision 1.19 libexec/ld.elf_so/tls.c: revision 1.16 libexec/ld.elf_so/tls.c: revision 1.17 libexec/ld.elf_so/tls.c: revision 1.18 libexec/ld.elf_so/tls.c: revision 1.19 tests/libexec/ld.elf_so/helper_onlydef_static/h_onlydef_static.c: revision 1.1 tests/libexec/ld.elf_so/helper_use_static/h_use_static.c: revision 1.1 tests/libexec/ld.elf_so/helper_use_static/h_use_static.c: revision 1.2 tests/libexec/ld.elf_so/helper_def_static/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_def_static/Makefile: revision 1.2 libexec/ld.elf_so/arch/hppa/hppa_reloc.c: revision 1.50 distrib/sets/lists/debug/shl.mi: revision 1.310 libexec/ld.elf_so/README.TLS: revision 1.6 distrib/sets/lists/debug/shl.mi: revision 1.311 distrib/sets/lists/debug/shl.mi: revision 1.314 tests/libexec/ld.elf_so/helper_dso3/Makefile: revision 1.2 tests/libexec/ld.elf_so/helper_symver_dso1/Makefile: revision 1.4 libexec/ld.elf_so/arch/powerpc/ppc_reloc.c: revision 1.63 tests/libexec/ld.elf_so/helper_def_dynamic/h_def_dynamic.c: revision 1.1 tests/libexec/ld.elf_so/helper_onlydef/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_onlydef/Makefile: revision 1.2 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.10 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.11 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.12 libexec/ld.elf_so/map_object.c: revision 1.66 tests/libexec/ld.elf_so/helper.mk: revision 1.1 libexec/ld.elf_so/arch/sparc/mdreloc.c: revision 1.57 libexec/ld.elf_so/map_object.c: revision 1.67 tests/libexec/ld.elf_so/helper_onlydef/h_onlydef.c: revision 1.1 tests/libexec/ld.elf_so/helper_symver_dso2/Makefile: revision 1.4 tests/libexec/ld.elf_so/helper_use_static/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_use_static/Makefile: revision 1.2 tests/libexec/ld.elf_so/helper_use_static/Makefile: revision 1.3 tests/libexec/ld.elf_so/helper_use_dynamic/h_use_dynamic.c: revision 1.1 tests/libexec/ld.elf_so/helper_abuse_static/h_abuse_static.c: revision 1.1 libexec/ld.elf_so/arch/riscv/mdreloc.c: revision 1.9 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.1 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.2 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.3 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.4 tests/libexec/ld.elf_so/helper_onlyctor_dynamic/Makefile: revision 1.1 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.5 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.6 libexec/ld.elf_so/arch/m68k/mdreloc.c: revision 1.34 tests/libexec/ld.elf_so/helper_onlyctor_dynamic/Makefile: revision 1.2 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.7 libexec/ld.elf_so/arch/i386/mdreloc.c: revision 1.42 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.8 libexec/ld.elf_so/arch/i386/mdreloc.c: revision 1.43 libexec/ld.elf_so/arch/or1k/mdreloc.c: revision 1.4 tests/libexec/ld.elf_so/t_tls_extern.c: revision 1.9 tests/libexec/ld.elf_so/helper_onlyuse_dynamic/Makefile: revision 1.1 tests/libexec/ld.elf_so/helper_onlyuse_dynamic/Makefile: revision 1.2 tests/libexec/ld.elf_so/helper_abuse_dynamic/h_abuse_dynamic.c: revision 1.1 tests/libexec/ld.elf_so/helper_onlyctor_dynamic/h_onlyctor_dynamic.c: revision 1.1 tests/libexec/ld.elf_so/helper_onlyuse_static/h_onlyuse_static.c: revision 1.1 tests/libexec/ld.elf_so/helper_onlyuse_dynamic/h_onlyuse_dynamic.c: revision 1.1 tests/libexec/ld.elf_so/helper_dso1/Makefile: revision 1.2 distrib/sets/lists/tests/shl.mi: revision 1.12 distrib/sets/lists/tests/shl.mi: revision 1.13 libexec/ld.elf_so/arch/alpha/alpha_reloc.c: revision 1.44 (all via patch)
ld.elf_so: New test for extern initial-exec TLS, PR toolchain/50277.
ld.elf_so: Fix extern TLS test to match PR toolchain/50277. Now it's actually testing the problem. ld.elf_so: Nix inadvertently committed private test program. ld.elf_so: Fix set lists for MKDEBUG=yes builds with t_tls_extern.
ld.elf_so: Sprinkle tls debug messages.
ld.elf_so: Make tls alloc debug messages more detailed and greppable.
ld.elf_so: Test variations on PR toolchain/50277.
ld.elf_so: Test extern dynamic TLS too.
ld.elf_so: Factor out logic in TLS tests to make writing more easier. No functional change intended.
ld.elf_so: Test TLS abuse of static def, dynamic use and vice versa.
ld.elf_so: Shorter test names. No functional non-cosmetic change intended.
ld.elf_so: Separately test eager and lazy resolution of def tls ptr. eager: before loading use library lazy: after loading use library
Add recent ld.elf_so test helpers debug info ld.elf_so: Add new files to debug/shl.mi.
ld.elf_so: tls_extern dynamic_defabuse_eager must xfail differently. If a symbol has already been resolved as dynamic TLS, any library that tries to use it as static TLS cannot be dlopened.
ld.elf_so: Test another edge case of mismatched TLS models. One library defines a symbol and _doesn't_ use it, so it has no indication of whether the symbol is for static TLS or dynamic TLS, and then two other libraries use it in different ways.
ld.elf_so: Test dynamic-then-static abuse via ctor.
ld.elf_so: Fix missing tab in debug/shl.mi in last change.
Fix interactions of initial-exec TLS model and dlopen (1) If an initial-exec relocation was used for a non-local symbol (i.e. the definition of the symbol is in a different DSO), the computation of the static TLS offset used the wrong DSO. This would effectively mean the wrong address was computed (PR toolchain/50277, PR pkg/57445). Fix this by forcing the computation of the correct DSO (the one defining the symbol). This code uses __UNCONST to avoid the vast interface changes for this special case. (2) If symbols from a DSO loaded via dlopen are used with both global-dynamic/local-dynamic and initial-exec relocations AND a initial-exec relocation was resolved first in a thread, a split brain situation could exist where the dynamic relocations would use one memory block (separate allocation) and the initial-exec relocations the static per-thread TLS space. (3) If the initial-exec relocation in (2) is seen after any thread has already used a GD/LD allocation, bail out. Since IE relocations are used only in the GOT, this will prevent the dlopen. This is a bit more aggressive than necessary, but a full blown reference counting doesn't seem to be justified. Avoid using uninitialized variable "symnum" when building with DEBUG enabled by borrowing the rdbg_symname() macro from arch/x86_64. ld.elf_so: Sprinkle more debug messages on dlopen and error. PR pkg/57445 Fix MKDEBUGLIB build by adding these installed files to the debug set list. XXX One could argue that these files are not of any use, so why install them? I don't have a good argument either way, and this is (for now) a simple work-around for PR bin/57455 Please feel free to commit a different fix to avoid installing these files at all. Fix markup of libh_ MKDEBUGLIB=yes only files TLS variant I archs need to fudge the offset by the size of the TCB. tests/libexec/ld.elf_so: Fix helper library makefiles. 1. Consolidate logic into a single helper.mk to reduce duplication. 2. Set NO* variables, not MK* variables which are reserved for user. 3. Avoid eager X!= in favour of lazy ${X:sh}. 4. Mark _g.a set list entries obsolete. Never should've been built! PR misc/57462
|
| 1.21.2.1 |
| 02-Aug-2025 |
perseant | Sync with HEAD
|
| 1.28.2.3 |
| 18-Dec-2025 |
martin | Pull up following revision(s) (requested by riastradh in ticket #129):
distrib/sets/lists/tests/mi: revision 1.1404 libexec/ld.elf_so/headers.c: revision 1.76 tests/libexec/ld.elf_so/t_dladdr.c: revision 1.1 tests/libexec/ld.elf_so/t_dladdr.c: revision 1.2 tests/libexec/ld.elf_so/Makefile: revision 1.31
distrib/sets/lists/debug/mi: revision 1.493
dl_addr(3): Add some automatic tests.
XXX Should also test the libc stubs, maybe move this into tests/lib/libc/dlfcn and test both static and (for MKPIC=yes) dynamic, but this'll do for now.
PR lib/59567: dladdr(3) doesn't work properly especially when main executable is loaded at high memory address
dladdr(3): Fix determination of object address intervals.
This appears to have been broken in rev. 1.62 back in 2017 with a change to compute the largest distance from the first LOAD segment's starting address to the maximum address of any LOAD segment -- we started by finding the distance from _zero_ to the maximum address of the first LOAD segment because we subtracted obj->vaddrbase which wasn't initialized yet, so we would overshoot obj->mapsize and obj->textsize by whatever the value of obj->vaddrbase turned out to be.
XXX The commit message for 1.62 suggests we are dropping the assumption that the LOAD segments appear in order. But it looks to me like we still assume the _first_ load segment has the lowest virtual address, because we keep it as obj->vaddrbase/obj->mapbase and use it as a reference point for measuring the size of an object by subtracting it from each load segment's maximum address. Is the original assumption that LOAD segments appear in order valid after all, or do we need to do extra work here to handle objects whose LOAD segments are so much out of order that the first LOAD segment isn't lowest in virtual address space? Unclear!
Might help with wine. Based on a patch by Akihiro Sagawa, thanks!
PR lib/59567: dladdr(3) doesn't work properly especially when main executable is loaded at high memory address
|
| 1.28.2.2 |
| 18-Dec-2025 |
martin | Pull up following revision(s) (requested by riastradh in ticket #128):
distrib/sets/lists/tests/mi: revision 1.1403 tests/libexec/ld.elf_so/Makefile: revision 1.30 distrib/sets/lists/debug/mi: revision 1.492 tests/libexec/ld.elf_so/t_tls_alignment.c: revision 1.1
Add a testcase for PR/59652.
|
| 1.28.2.1 |
| 18-Dec-2025 |
martin | Pull up following revision(s) (requested by riastradh in ticket #127):
distrib/sets/lists/tests/mi: revision 1.1401 tests/libexec/ld.elf_so/t_dlclose_thread.c: revision 1.1 distrib/sets/lists/debug/mi: sort + revision 1.491 tests/libexec/ld.elf_so/Makefile: revision 1.29
ld.elf_so(1): Test concurrent dlopen/dlclose.
PR lib/59751: dlclose is not MT-safe depending on the libraries unloaded
|