summaryrefslogtreecommitdiff
path: root/libexec/ld.so
AgeCommit message (Collapse)Author
2022-09-05Do not perform out-of-bounds arrray accesses for bogus relocation type values.Miod Vallat
2022-09-02Use a shorter system call invocation template for system calls in the rangeMiod Vallat
0-127, where immediate addressing can be used to load the system call number in r0, rather than performing a memory load using pc-relative addressing. No functional change, but rm(1) runs a couple cycles faster per file now.
2022-08-29use ansi volatile keyword, not __volatile__Jonathan Gray
ok miod@ guenther@
2022-08-20Support RTLD_NOLOAD in ld.so. From guenther@. OK jca@ guenther@Stuart Henderson
2022-06-14Document search orderKlemens Nanni
Explain when and how LD_LIBRARY_PATH, DT_RUNPATH and DT_RPATH are used. Input OK guenther
2022-05-24Address the clang 13 "changed binding to STB_WEAK" warning on arm (32bit):Philip Guenther
* add _?ENTRY_NB to arm/asm.h * make sure ld.so's arm asm bits see the same includes as libc * switch libc's arm bits to the generic DEFS.h * switch arm ASM bits from ENTRY to ENTRY_NB as necessary ok kettenis@ miod@
2022-05-10Prevent out-of-bounds array access with binaries that use unsupportedMark Kettenis
relocations. ok guenther@
2022-05-01Prevent out-of-bounds array access with binaries that use unsupportedMark Kettenis
relocations. ok guenther@
2022-01-31Nothing depends on archdep.h pulling in other #includes anymore,Philip Guenther
so delete the #includes and hide the RELOC_* functions that are only used by lib/csu behind "#ifdef RCRT0" matches the others and it's hard to see how it will fail
2022-01-31Inline RELOC_* into boot_md.c and simplify the code based on whatPhilip Guenther
we can verify at build time. Track dt_pltgot as an Elf_Addr instead of an Elf_Addr* to eliminat casts on both setting and using. Set RELATIVE_RELOC so the ld.so Makefile can verify that it has just the relocation types we expect. Nothing depends on archdep.h pulling in other #includes anymore, so delete the #includes and hide the RELOC_* functions that are only used by lib/csu behind "#ifdef RCRT0" Tested with full build.
2022-01-28Update comment: struct link_map is defined in <link_elf.h>Philip Guenther
noted by miod
2022-01-18Avoid pulling sys/param.h, by using _ALIGN instead.Theo de Raadt
sys/time.h now gets NBBY and howmany() also ok guenther
2022-01-17Stop supporting a GOT with only one reserved entry in static PIEPhilip Guenther
and ld.so itself: support for that in dynamic objects was removed in 2010. Inline RELOC_GOT() into boot_md.c and clean up the result like boot.c, snag just the three DT_MIPS_* tags needed, and delete the error case which is verified at build time. ok visa@
2022-01-17Nothing depends on archdep.h pulling in other #includes anymore,Philip Guenther
so delete the #includes and hide the RELOC_* functions that are only used by lib/csu behind "#ifdef RCRT0" these are the ones I tested; kettenis@ was on board with the concept
2022-01-16Nothing depends on archdep.h pulling in other #includes anymore,Philip Guenther
so delete the #includes and hide the RELOC_* functions that are only used by lib/csu behind "#ifdef RCRT0" ok jca@
2022-01-16Nothing depends on archdep.h pulling in other #includes anymore,Philip Guenther
so delete the #includes and hide the RELOC_* functions that are only used by lib/csu behind "#ifdef RCRT0" ok kettenis@
2022-01-16Nothing depends on archdep.h pulling in other #includes anymore,Philip Guenther
so delete the #includes and hide the RELOC_* functions that are only used by lib/csu behind "#ifdef RCRT0" ok aoyama@
2022-01-08archdep.h needed for _dl_dcbf, on powerpcTheo de Raadt
2022-01-08need "archdep.h" for _dl_md_plabel on hppaTheo de Raadt
2022-01-08Prep .c files for removing the #includes from */archdep.hPhilip Guenther
* 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@
2021-12-30Sync from libc: Use _MAX_PAGE_SHIFT, rather than #ifdef mips64Philip Guenther
ok otto@
2021-12-30Delete dead (duplicate) testPhilip Guenther
2021-12-23Roll the syscalls that have an off_t argument to remove the explicit padding.Philip Guenther
Switch libc and ld.so to the generic stubs for these calls. WARNING: reboot to updated kernel before installing libc or ld.so! Time for a story... When gcc (back in 1.x days) first implemented long long, it didn't (always) pass 64bit arguments in 'aligned' registers/stack slots, with the result that argument offsets didn't match structure offsets. This affected the nine system calls that pass off_t arguments: ftruncate lseek mmap mquery pread preadv pwrite pwritev truncate To avoid having to do custom ASM wrappers for those, BSD put an explicit pad argument in so that the off_t argument would always start on a even slot and thus be naturally aligned. Thus those odd wrappers in lib/libc/sys/ that use __syscall() and pass an extra '0' argument. The ABIs for different CPUs eventually settled how things should be passed on each and gcc 2.x followed them. The only arch now where it helps is landisk, which needs to skip the last argument register if it would be the first half of a 64bit argument. So: add new syscalls without the pad argument and on landisk do that skipping directly in the syscall handler in the kernel. Keep compat support for the existing syscalls long enough for the transition. ok deraadt@
2021-12-14A better approach is to defined __CONCAT locallyTheo de Raadt
2021-12-14Sigh. This sys/cdefs.h is hiding use of __CONCAT in a non-C context.Theo de Raadt
Needs some other repairs first.
2021-12-13including sys/cdefs.h manually started as a result of netbsd trying toTheo de Raadt
macro-build a replacement for sccsid, and was done without any concern for namespace damage. Unfortunately this practice started infecting other code as others were unaware they didn't need the file. ok millert guenther
2021-11-27Remove an unneeded variable to fix compiler warning with clang 13.Visa Hankala
OK jsg@
2021-11-14Delete all the no-op RELOC_GOT() macros and their uses.Philip Guenther
Annotate RELOC_DYN() on non-hppa as only used in lib/csu. Delete some inconsistent comments, adjust whitespace, and reorder mips64's archdep.h so that the ld.so/*/archdep.h files look (almost) the same. ok visa@ kettenis@
2021-11-12Add support for RELR relocations in the executable and share objects.Philip Guenther
This doesn't affect ld.so's self-reloc, which still requires DT_REL/DT_RELA ok kettenis@
2021-11-09Like most archs, riscv doesn't need resolution of JUMP_SLOT relocationsPhilip Guenther
in static PIE binaries: delete RELOC_JMPREL and HAVE_JMPREL there. ok kettenis@
2021-10-24For open/openat, if the flags parameter does not contain O_CREAT, theTheo de Raadt
3rd (variadic) mode_t parameter is irrelevant. Many developers in the past have passed mode_t (0, 044, 0644, or such), which might lead future people to copy this broken idiom, and perhaps even believe this parameter has some meaning or implication or application. Delete them all. This comes out of a conversation where tb@ noticed that a strange (but intentional) pledge behaviour is to always knock-out high-bits from mode_t on a number of system calls as a safety factor, and his bewilderment that this appeared to be happening against valid modes (at least visually), but no sorry, they are all irrelevant junk. They could all be 0xdeafbeef. ok millert
2021-10-07Print the name of the symbol that can't be resolved when usingJoshua Stein
LD_DEBUG ok mpi, kn
2021-06-26Make lazy binding work on riscv64.Mark Kettenis
prompted by deraadt@
2021-06-26Build ld.so with --march=rv64imac on riscv64 to be absolutely sure thatMark Kettenis
ld.so doesn't use the FP registers. ok deraadt@
2021-06-26Use AFLAGS when building syscall stubs. Drop AINC wich isn't used.Mark Kettenis
ok deraadt@
2021-06-02add RTLD_NODELETE supportSebastien Marie
if RTLD_NODELETE isn't POSIX, it is widely deployed: at least linux, freebsd, dragonfly, netbsd, solaris, illumos, apple, and fuchsia have it. ok kettenis@ on previous version with help from and ok guenther@ diff partially inspired from a diff from brad@
2021-05-25program headers: do not rely on DYNAMIC coming before GNU_RELROkn
Except for some specific cases (thanks guenther) ELF mandates nothing but the file header be at a fixed location, hence ld.so(1) must not assume any specific order for headers, segments, etc. Looping over the program header table to parse segment headers, _dl_boot() creates the executable object upon DYNAMIC and expects it to be set upon GNU_RELRO, resulting in a NULL dereference iff that order is reversed. Store relocation bits in temporary variables and update the executable object once all segment headers are parsed to lift this dependency. Under __mips__ _dl_boot() later on uses the same temporary variable, so move nothing but the declaration out of MI code so as to not alter the MD code's logic/behaviour. Found while porting patchelf(1) from NixOS. OK guenther
2021-05-16Correct problem in riscv64 dtors execution load the function pointerDale Rahn
correctly and do not overwrite it in csu. allows most ld.so regressions to pass confirmed by jsg@, ok kettenis
2021-04-28riscv64 ld.soDale Rahn
derived from arm64 go ahead deraadt@
2021-04-19Same internal consistency check as libc malloc: size in hash tableOtto Moerbeek
should correspond to size of chunk meta data
2021-03-16On i386 don't attempt to map shared libraries in low memory whenKurt Miller
a large executable's .text section crosses the 512MB exec line. Executables that have MAXTSIZ > 64MB can map above the default 512MB exec line. When this happens, shared libs that attempt to map into low memory will find their .data section can not be mapped. ld.so will attempt to remap the share lib at higher addresses until it can be mapped. For very large executables like chrome this process is very time consuming. This change detects how much of the executable's .text section exceeds 512MB and uses that as the initial hint for shared libs to map into which avoids attempting to map into blocked memory. okay deraadt@
2020-12-26Fix a nasty mem leak in ld.so's own malloc. This was hard to diagnose, sinceOtto Moerbeek
malloc dumping and gdb do not help at all when studying ld.so. In the end it turns out ot be a simple merge error causing extra mmap calls. ok miller@ tb@
2020-11-28Add retguard to macppc kernel locore.S, ofwreal.S, setjmp.Sgkoehler
This changes RETGUARD_SETUP(ffs) to RETGUARD_SETUP(ffs, %r11, %r12) and RETGUARD_CHECK(ffs) to RETGUARD_CHECK(ffs, %r11, %r12) to show that r11 and r12 are in use between setup and check, and to pick registers other than r11 and r12 in some kernel functions. ok mortimer@ deraadt@
2020-10-26Retguard asm macros for powerpc libc, ld.sogkoehler
Add retguard to some, but not all, asm functions in libc. Edit SYS.h in libc to remove the PREFIX macros and add SYSENTRY (more like aarch64 and powerpc64), so we can insert RETGUARD_SETUP after SYSENTRY. Some .S files in this commit don't get retguard, but do stop using the old prefix macros. Tested by deraadt@, who put this diff in a macppc snap.
2020-10-16Use the retguard macros from asm.h to protect the system call stubs.Theo de Raadt
ok mortimer kettenis
2020-10-15make three mib[] arrays const, as was done in libcTheo de Raadt
2020-08-11clang 10 now emits calls to __multi3 from libcompiler_rtJeremie Courreges-Anglas
Hints from kettenis@, ok kettenis@ deraadt@
2020-07-18Use the same names as the 64-bit PowerPC ELF ABI for the relocations.Mark Kettenis
2020-07-16Rewrite loop to match what is written down in the ABI document.Mark Kettenis
ok drahn@
2020-07-16Make lazy binding work.Mark Kettenis
Committing on behalf of drahn@ who is a bit busy.