mirror of
https://github.com/opnsense/src.git
synced 2026-02-14 00:04:14 -05:00
Newer binutils supports extensions to the MIPS ABI for non-PIC code that is used when compiling O32 binaries with clang 5 (but not used for N64 oddly enough). These extensions require support for R_MIPS_COPY relocations as well as a second PLT GOT using R_MIPS_JUMP_SLOT relocations. For R_MIPS_COPY, use the same approach as on other architectures where fixups are deferred to the MD do_copy_relocations. The additional PLT GOT for jump slots is located in a .got.plt section which is identified by a DT_MIPS_PLTGOT dynamic entry. This GOT also requires fixups for the first two GOT entries just as the normal GOT. However, the entry point for this second GOT uses a different calling convention. Rather than passing an offset into the GOT, it passes an offset into the .rel.plt section. This requires a second entry point (_rtld_pltbind_start) which calls the normal _rtld_bind() rather than _mips_rtld_bind(). This also means providing a real version of reloc_jmpslot() which is used by _rtld_bind(). In addition, add real implementions of reloc_plt() and reloc_jmpslots() which walk .rel.plt handling R_MIPS_JUMP_SLOT relocations. Reviewed by: kib Sponsored by: DARPA / AFRL Differential Revision: https://reviews.freebsd.org/D12326 |
||
|---|---|---|
| .. | ||
| aarch64 | ||
| amd64 | ||
| arm | ||
| i386 | ||
| mips | ||
| powerpc | ||
| powerpc64 | ||
| riscv | ||
| sparc64 | ||
| tests | ||
| debug.c | ||
| debug.h | ||
| libmap.c | ||
| libmap.h | ||
| Makefile | ||
| Makefile.depend | ||
| malloc.c | ||
| map_object.c | ||
| paths.h | ||
| rtld.1 | ||
| rtld.c | ||
| rtld.h | ||
| rtld_lock.c | ||
| rtld_lock.h | ||
| rtld_printf.c | ||
| rtld_printf.h | ||
| rtld_tls.h | ||
| rtld_utrace.h | ||
| Symbol.map | ||
| xmalloc.c | ||