llvm-capstone/lld
Arthur Eubanks 9d6ec280fc [lld/ELF] Don't relax R_X86_64_(REX_)GOTPCRELX when offset is too far
For each R_X86_64_(REX_)GOTPCRELX relocation, check that the offset to the symbol is representable with 2^32 signed offset. If not, add a GOT entry for it and set its expr to R_GOT_PC so that we emit the GOT load instead of the relaxed lea. Do this in finalizeAddressDependentContent() where we iteratively attempt this (e.g. RISCV uses this for relaxation, ARM uses this to insert thunks).

Decided not to do the opposite of inserting GOT entries initially and removing them when relaxable because removing GOT entries isn't simple.

One drawback of this approach is that if we see any GOTPCRELX relocation, we'll create an empty .got even if it's not required in the end.

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D157020
2023-10-04 13:03:56 -07:00
..
cmake/modules
COFF [LLD][COFF] Mark operator== const to avoid ambiguity in C++20. (#68119) 2023-10-04 11:39:20 -04:00
Common [NFC][LLD] Refactor some copy-paste into the Common library (#67598) 2023-09-28 00:06:48 +02:00
docs [ELF] A new code layout algorithm for function reordering [3a/3] 2023-09-26 06:24:34 -07:00
ELF [lld/ELF] Don't relax R_X86_64_(REX_)GOTPCRELX when offset is too far 2023-10-04 13:03:56 -07:00
include/lld/Common [NFC][LLD] Refactor some copy-paste into the Common library (#67598) 2023-09-28 00:06:48 +02:00
MachO [NFC][LLD] Refactor some copy-paste into the Common library (#67598) 2023-09-28 00:06:48 +02:00
MinGW [LLD] [MinGW] Ignore --sort-common option (#66336) 2023-09-15 11:13:27 +03:00
test [lld/ELF] Don't relax R_X86_64_(REX_)GOTPCRELX when offset is too far 2023-10-04 13:03:56 -07:00
tools/lld [lld] Do not include StringSwitch.h (NFC) 2023-08-23 09:20:14 -07:00
unittests
utils
wasm [WebAssembly] Allow absolute symbols in the linking section (symbol table) (#67493) 2023-10-03 13:16:16 -07:00
.clang-format
.clang-tidy
.gitignore
CMakeLists.txt
CODE_OWNERS.TXT
LICENSE.TXT
README.md

LLVM Linker (lld)

This directory and its subdirectories contain source code for the LLVM Linker, a modular cross platform linker which is built as part of the LLVM compiler infrastructure project.

lld is open source software. You may freely distribute it under the terms of the license agreement found in LICENSE.txt.

Benchmarking

In order to make sure various developers can evaluate patches over the same tests, we create a collection of self contained programs.

It is hosted at https://s3-us-west-2.amazonaws.com/linker-tests/lld-speed-test.tar.xz

The current sha256 is 10eec685463d5a8bbf08d77f4ca96282161d396c65bd97dc99dbde644a31610f.