llvm-project/lld/docs
Fangrui Song e041d15f5e [LLD][ELF] Add the -z ifunc-noplt option
Patch by Mark Johnston!

Summary:
When the option is configured, ifunc calls do not go through the PLT;
rather, they appear as regular function calls with relocations
referencing the ifunc symbol, and the resolver is invoked when
applying the relocation.  This is intended for use in freestanding
environments where text relocations are permissible and is incompatible
with the -z text option.  The option is motivated by ifunc usage in the
FreeBSD kernel, where ifuncs are used to elide CPU feature flag bit
checks in hot paths.  Instead of replacing the cost of a branch with that
of an indirect function call, the -z ifunc-noplt option is used to ensure
that ifunc calls carry no hidden overhead relative to normal function
calls.

Test Plan:
I added a couple of regression tests and tested the FreeBSD kernel
build using the latest lld sources.

To demonstrate the effects of the change, I used a micro-benchmark
which results in frequent invocations of a FreeBSD kernel ifunc.  The
benchmark was run with and without IBRS enabled, and with and without
-zifunc-noplt configured.  The observed speedup is small and consistent,
and is significantly larger with IBRS enabled:

https://people.freebsd.org/~markj/ifunc-noplt/noibrs.txt
https://people.freebsd.org/~markj/ifunc-noplt/ibrs.txt

Reviewed By: ruiu, MaskRay

Differential Revision: https://reviews.llvm.org/D61613

llvm-svn: 360685
2019-05-14 15:25:21 +00:00
..
_static
_templates Fixed link to bugzilla in the sidebar 2017-11-08 10:10:31 +00:00
llvm-theme Partially revert r287009: Remove trailing whitespace. 2016-11-15 19:09:13 +00:00
AtomLLD.rst Add notes about the scope of the documents. 2017-02-24 04:31:08 +00:00
CMakeLists.txt docs: Fix Sphinx detection with out-of-tree builds 2017-05-09 01:43:22 +00:00
Driver.rst Move new lld's code to Common subdirectory. 2017-10-02 21:00:41 +00:00
NewLLD.rst Fix some sphinx doc errors. 2019-02-01 17:06:41 +00:00
README.txt [WebAssembly] Update docs 2018-11-29 02:55:25 +00:00
Readers.rst key method -> key function 2018-12-21 22:40:10 +00:00
ReleaseNotes.rst lld-link: Add /force:multipleres extension to make dupe resource diag non-fatal 2019-05-02 21:21:55 +00:00
WebAssembly.rst [docs] Copy-edit lld/docs/WebAssembly.rst 2019-04-24 15:13:35 +00:00
conf.py Bump the trunk version to 9.0.0svn 2019-01-16 10:57:02 +00:00
design.rst Add notes about the scope of the documents. 2017-02-24 04:31:08 +00:00
development.rst Add notes about the scope of the documents. 2017-02-24 04:31:08 +00:00
getting_started.rst Adjust documentation for git migration. 2019-01-29 16:37:27 +00:00
hello.png Partially revert r287009: Remove trailing whitespace. 2016-11-15 19:09:13 +00:00
index.rst docs: add missingkeyfunction to doctree, fix title 2019-02-07 12:39:35 +00:00
ld.lld.1 [LLD][ELF] Add the -z ifunc-noplt option 2019-05-14 15:25:21 +00:00
make.bat
missingkeyfunction.rst Fix two sphinx warnings 2019-04-11 07:31:03 +00:00
open_projects.rst lld/include/lld/Core/TODO.txt 2019-01-14 00:45:27 +00:00
sphinx_intro.rst [docs] Update doc building instructions 2017-12-05 23:31:26 +00:00
windows_support.rst lld/include/lld/Core/TODO.txt 2019-01-14 00:45:27 +00:00

README.txt

lld Documentation
=================

The lld documentation is written using the Sphinx documentation generator. It is
currently tested with Sphinx 1.1.3.

We currently use the 'nature' theme and a Beaker inspired structure.

See sphinx_intro.rst for more details.