History log of /openbsd-current/libexec/ld.so/aarch64/rtld_machine.c
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 1.22 29-Jan-2023 gnezdo

Unite all nitems copies in ld.so/util.h

OK deraadt


Revision tags: OPENBSD_7_1_BASE OPENBSD_7_2_BASE
# 1.21 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.20 18-Feb-2020 kettenis

Now that the kernel skips the two instructions immediately following
a syscall, replace the double nop with a dsb nsh; isb; sequence which
stops the CPU from speculating any further. This fix was suggested
by Anthony Steinhauser.

ok deraadt@


# 1.19 26-Jan-2020 kettenis

Insert two nop instructions after each svc #0 instruction in userland.
The will be replaced by a speculation barrier as soon as we teach the
kernel to skip over these two instructions when returning from a
system call.

ok patrick@, deraadt@


# 1.18 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.17 28-Nov-2019 guenther

Revert yesterday's _dl_md_reloc() and _dl_md_reloc_got() changes:
something's broken on at least i386.


# 1.16 27-Nov-2019 guenther

Delete now obsolete comments


# 1.15 27-Nov-2019 guenther

armv7 and aarch64 specify GLOB_DAT as having an addend, so treat it
exactly like the ABS{32,64} relocation there.

noted by and ok kettenis@


# 1.14 26-Nov-2019 guenther

Clean up _dl_md_reloc(): instead of having tables and piles of conditionals
that handle a dozen relocation types for each, just have a nice little switch
for the four specific relocations that actually occur.

Besides being smaller and easier to understand, this fixes the COPY
relocation handling to only do one symbol lookup, instead of looking
up the symbol and then immediately looking it up again (with the
correct flags to find the instance it needs).

ok kettenis@


# 1.13 26-Nov-2019 guenther

Make aarch64, amd64, arm, and i386 more like sparc64: move non-lazy
relocation from _dl_md_reloc() to _dl_md_reloc_all_plt() which has
the minimal code to do it.

Also, avoid division on PLTRELSZ; just use it to offset to the end.

ok kettenis@


# 1.12 24-Oct-2019 guenther

Delete unused support for relocations that don't require alignment.

ok mpi@ kettenis@


# 1.11 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.10 05-Oct-2019 guenther

Delete some obsolete debugging #ifdefs blocks

ok mlarkin@, mpi@, krw@, deraadt@


# 1.9 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.8 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.7 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.6 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_3_BASE OPENBSD_6_4_BASE
# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.


# 1.21 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.20 18-Feb-2020 kettenis

Now that the kernel skips the two instructions immediately following
a syscall, replace the double nop with a dsb nsh; isb; sequence which
stops the CPU from speculating any further. This fix was suggested
by Anthony Steinhauser.

ok deraadt@


# 1.19 26-Jan-2020 kettenis

Insert two nop instructions after each svc #0 instruction in userland.
The will be replaced by a speculation barrier as soon as we teach the
kernel to skip over these two instructions when returning from a
system call.

ok patrick@, deraadt@


# 1.18 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.17 28-Nov-2019 guenther

Revert yesterday's _dl_md_reloc() and _dl_md_reloc_got() changes:
something's broken on at least i386.


# 1.16 27-Nov-2019 guenther

Delete now obsolete comments


# 1.15 27-Nov-2019 guenther

armv7 and aarch64 specify GLOB_DAT as having an addend, so treat it
exactly like the ABS{32,64} relocation there.

noted by and ok kettenis@


# 1.14 26-Nov-2019 guenther

Clean up _dl_md_reloc(): instead of having tables and piles of conditionals
that handle a dozen relocation types for each, just have a nice little switch
for the four specific relocations that actually occur.

Besides being smaller and easier to understand, this fixes the COPY
relocation handling to only do one symbol lookup, instead of looking
up the symbol and then immediately looking it up again (with the
correct flags to find the instance it needs).

ok kettenis@


# 1.13 26-Nov-2019 guenther

Make aarch64, amd64, arm, and i386 more like sparc64: move non-lazy
relocation from _dl_md_reloc() to _dl_md_reloc_all_plt() which has
the minimal code to do it.

Also, avoid division on PLTRELSZ; just use it to offset to the end.

ok kettenis@


# 1.12 24-Oct-2019 guenther

Delete unused support for relocations that don't require alignment.

ok mpi@ kettenis@


# 1.11 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.10 05-Oct-2019 guenther

Delete some obsolete debugging #ifdefs blocks

ok mlarkin@, mpi@, krw@, deraadt@


# 1.9 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.8 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.7 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.6 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_3_BASE OPENBSD_6_4_BASE
# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.


# 1.20 18-Feb-2020 kettenis

Now that the kernel skips the two instructions immediately following
a syscall, replace the double nop with a dsb nsh; isb; sequence which
stops the CPU from speculating any further. This fix was suggested
by Anthony Steinhauser.

ok deraadt@


# 1.19 26-Jan-2020 kettenis

Insert two nop instructions after each svc #0 instruction in userland.
The will be replaced by a speculation barrier as soon as we teach the
kernel to skip over these two instructions when returning from a
system call.

ok patrick@, deraadt@


# 1.18 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.17 28-Nov-2019 guenther

Revert yesterday's _dl_md_reloc() and _dl_md_reloc_got() changes:
something's broken on at least i386.


# 1.16 27-Nov-2019 guenther

Delete now obsolete comments


# 1.15 27-Nov-2019 guenther

armv7 and aarch64 specify GLOB_DAT as having an addend, so treat it
exactly like the ABS{32,64} relocation there.

noted by and ok kettenis@


# 1.14 26-Nov-2019 guenther

Clean up _dl_md_reloc(): instead of having tables and piles of conditionals
that handle a dozen relocation types for each, just have a nice little switch
for the four specific relocations that actually occur.

Besides being smaller and easier to understand, this fixes the COPY
relocation handling to only do one symbol lookup, instead of looking
up the symbol and then immediately looking it up again (with the
correct flags to find the instance it needs).

ok kettenis@


# 1.13 26-Nov-2019 guenther

Make aarch64, amd64, arm, and i386 more like sparc64: move non-lazy
relocation from _dl_md_reloc() to _dl_md_reloc_all_plt() which has
the minimal code to do it.

Also, avoid division on PLTRELSZ; just use it to offset to the end.

ok kettenis@


# 1.12 24-Oct-2019 guenther

Delete unused support for relocations that don't require alignment.

ok mpi@ kettenis@


# 1.11 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.10 05-Oct-2019 guenther

Delete some obsolete debugging #ifdefs blocks

ok mlarkin@, mpi@, krw@, deraadt@


# 1.9 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.8 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.7 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.6 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_3_BASE OPENBSD_6_4_BASE
# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.


# 1.19 26-Jan-2020 kettenis

Insert two nop instructions after each svc #0 instruction in userland.
The will be replaced by a speculation barrier as soon as we teach the
kernel to skip over these two instructions when returning from a
system call.

ok patrick@, deraadt@


# 1.18 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.17 28-Nov-2019 guenther

Revert yesterday's _dl_md_reloc() and _dl_md_reloc_got() changes:
something's broken on at least i386.


# 1.16 27-Nov-2019 guenther

Delete now obsolete comments


# 1.15 27-Nov-2019 guenther

armv7 and aarch64 specify GLOB_DAT as having an addend, so treat it
exactly like the ABS{32,64} relocation there.

noted by and ok kettenis@


# 1.14 26-Nov-2019 guenther

Clean up _dl_md_reloc(): instead of having tables and piles of conditionals
that handle a dozen relocation types for each, just have a nice little switch
for the four specific relocations that actually occur.

Besides being smaller and easier to understand, this fixes the COPY
relocation handling to only do one symbol lookup, instead of looking
up the symbol and then immediately looking it up again (with the
correct flags to find the instance it needs).

ok kettenis@


# 1.13 26-Nov-2019 guenther

Make aarch64, amd64, arm, and i386 more like sparc64: move non-lazy
relocation from _dl_md_reloc() to _dl_md_reloc_all_plt() which has
the minimal code to do it.

Also, avoid division on PLTRELSZ; just use it to offset to the end.

ok kettenis@


# 1.12 24-Oct-2019 guenther

Delete unused support for relocations that don't require alignment.

ok mpi@ kettenis@


# 1.11 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.10 05-Oct-2019 guenther

Delete some obsolete debugging #ifdefs blocks

ok mlarkin@, mpi@, krw@, deraadt@


# 1.9 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.8 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.7 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.6 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_3_BASE OPENBSD_6_4_BASE
# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.


# 1.18 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.17 28-Nov-2019 guenther

Revert yesterday's _dl_md_reloc() and _dl_md_reloc_got() changes:
something's broken on at least i386.


# 1.16 27-Nov-2019 guenther

Delete now obsolete comments


# 1.15 27-Nov-2019 guenther

armv7 and aarch64 specify GLOB_DAT as having an addend, so treat it
exactly like the ABS{32,64} relocation there.

noted by and ok kettenis@


# 1.14 26-Nov-2019 guenther

Clean up _dl_md_reloc(): instead of having tables and piles of conditionals
that handle a dozen relocation types for each, just have a nice little switch
for the four specific relocations that actually occur.

Besides being smaller and easier to understand, this fixes the COPY
relocation handling to only do one symbol lookup, instead of looking
up the symbol and then immediately looking it up again (with the
correct flags to find the instance it needs).

ok kettenis@


# 1.13 26-Nov-2019 guenther

Make aarch64, amd64, arm, and i386 more like sparc64: move non-lazy
relocation from _dl_md_reloc() to _dl_md_reloc_all_plt() which has
the minimal code to do it.

Also, avoid division on PLTRELSZ; just use it to offset to the end.

ok kettenis@


# 1.12 24-Oct-2019 guenther

Delete unused support for relocations that don't require alignment.

ok mpi@ kettenis@


# 1.11 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.10 05-Oct-2019 guenther

Delete some obsolete debugging #ifdefs blocks

ok mlarkin@, mpi@, krw@, deraadt@


# 1.9 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.8 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.7 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.6 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_3_BASE OPENBSD_6_4_BASE
# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.


# 1.17 28-Nov-2019 guenther

Revert yesterday's _dl_md_reloc() and _dl_md_reloc_got() changes:
something's broken on at least i386.


# 1.16 27-Nov-2019 guenther

Delete now obsolete comments


# 1.15 27-Nov-2019 guenther

armv7 and aarch64 specify GLOB_DAT as having an addend, so treat it
exactly like the ABS{32,64} relocation there.

noted by and ok kettenis@


# 1.14 26-Nov-2019 guenther

Clean up _dl_md_reloc(): instead of having tables and piles of conditionals
that handle a dozen relocation types for each, just have a nice little switch
for the four specific relocations that actually occur.

Besides being smaller and easier to understand, this fixes the COPY
relocation handling to only do one symbol lookup, instead of looking
up the symbol and then immediately looking it up again (with the
correct flags to find the instance it needs).

ok kettenis@


# 1.13 26-Nov-2019 guenther

Make aarch64, amd64, arm, and i386 more like sparc64: move non-lazy
relocation from _dl_md_reloc() to _dl_md_reloc_all_plt() which has
the minimal code to do it.

Also, avoid division on PLTRELSZ; just use it to offset to the end.

ok kettenis@


# 1.12 24-Oct-2019 guenther

Delete unused support for relocations that don't require alignment.

ok mpi@ kettenis@


# 1.11 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.10 05-Oct-2019 guenther

Delete some obsolete debugging #ifdefs blocks

ok mlarkin@, mpi@, krw@, deraadt@


# 1.9 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.8 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.7 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.6 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_3_BASE OPENBSD_6_4_BASE
# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.


# 1.16 27-Nov-2019 guenther

Delete now obsolete comments


# 1.15 27-Nov-2019 guenther

armv7 and aarch64 specify GLOB_DAT as having an addend, so treat it
exactly like the ABS{32,64} relocation there.

noted by and ok kettenis@


# 1.14 26-Nov-2019 guenther

Clean up _dl_md_reloc(): instead of having tables and piles of conditionals
that handle a dozen relocation types for each, just have a nice little switch
for the four specific relocations that actually occur.

Besides being smaller and easier to understand, this fixes the COPY
relocation handling to only do one symbol lookup, instead of looking
up the symbol and then immediately looking it up again (with the
correct flags to find the instance it needs).

ok kettenis@


# 1.13 26-Nov-2019 guenther

Make aarch64, amd64, arm, and i386 more like sparc64: move non-lazy
relocation from _dl_md_reloc() to _dl_md_reloc_all_plt() which has
the minimal code to do it.

Also, avoid division on PLTRELSZ; just use it to offset to the end.

ok kettenis@


# 1.12 24-Oct-2019 guenther

Delete unused support for relocations that don't require alignment.

ok mpi@ kettenis@


# 1.11 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.10 05-Oct-2019 guenther

Delete some obsolete debugging #ifdefs blocks

ok mlarkin@, mpi@, krw@, deraadt@


# 1.9 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.8 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.7 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.6 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_3_BASE OPENBSD_6_4_BASE
# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.


# 1.13 26-Nov-2019 guenther

Make aarch64, amd64, arm, and i386 more like sparc64: move non-lazy
relocation from _dl_md_reloc() to _dl_md_reloc_all_plt() which has
the minimal code to do it.

Also, avoid division on PLTRELSZ; just use it to offset to the end.

ok kettenis@


# 1.12 24-Oct-2019 guenther

Delete unused support for relocations that don't require alignment.

ok mpi@ kettenis@


# 1.11 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.10 05-Oct-2019 guenther

Delete some obsolete debugging #ifdefs blocks

ok mlarkin@, mpi@, krw@, deraadt@


# 1.9 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.8 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.7 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.6 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_3_BASE OPENBSD_6_4_BASE
# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.


# 1.12 24-Oct-2019 guenther

Delete unused support for relocations that don't require alignment.

ok mpi@ kettenis@


# 1.11 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.10 05-Oct-2019 guenther

Delete some obsolete debugging #ifdefs blocks

ok mlarkin@, mpi@, krw@, deraadt@


# 1.9 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.8 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.7 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.6 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_3_BASE OPENBSD_6_4_BASE
# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.


# 1.11 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.10 05-Oct-2019 guenther

Delete some obsolete debugging #ifdefs blocks

ok mlarkin@, mpi@, krw@, deraadt@


# 1.9 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.8 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.7 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.6 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_3_BASE OPENBSD_6_4_BASE
# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.


# 1.10 05-Oct-2019 guenther

Delete some obsolete debugging #ifdefs blocks

ok mlarkin@, mpi@, krw@, deraadt@


# 1.9 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.8 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.7 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.6 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_3_BASE OPENBSD_6_4_BASE
# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.


# 1.9 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.8 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.7 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.6 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_3_BASE OPENBSD_6_4_BASE
# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.


# 1.7 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.6 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_3_BASE OPENBSD_6_4_BASE
# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.


# 1.6 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_3_BASE OPENBSD_6_4_BASE
# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.


# 1.5 21-Dec-2017 kettenis

Implement missing bits to support lazy binding. Note that the code
deliberately does not save the floating-point argument registers
before calling _dl_bind(). Doing so would force an FPU context switch
upon every function call through the PLT. But since we compile ld.so
with -march=armv8-a+nofp+nosimd this is safe since nothing in the _dl_bind()
codepath uses he FPU registers.

ok guenther@, drahn@


# 1.4 24-Oct-2017 guenther

R_AARCH64_NONE should be zero, not 256. The latter was a deprecated
assignment and isn't used by clang/lld.

ok jsg@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.3 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@


# 1.2 23-Jan-2017 guenther

Fix format string mismatches

testing assistance patrick@


# 1.1 11-Jan-2017 patrick

Add support for AArch64.