Daniil Kovalev
417d2d7ce6
[PAC][lld][AArch64][ELF] Support signed GOT ( #113815 )
...
Depends on #113811
Support `R_AARCH64_AUTH_ADR_GOT_PAGE`, `R_AARCH64_AUTH_GOT_LO12_NC` and
`R_AARCH64_AUTH_GOT_ADD_LO12_NC` GOT-generating relocations. For preemptible
symbols, dynamic relocation `R_AARCH64_AUTH_GLOB_DAT` is emitted. Otherwise,
we unconditionally emit `R_AARCH64_AUTH_RELATIVE` dynamic relocation since
pointers in signed GOT needs to be signed during dynamic link time.
2024-12-17 10:23:01 +03:00
Peter Collingbourne
64da33a589
ELF: Introduce --randomize-section-padding option.
...
The --randomize-section-padding option randomly inserts padding between
input sections using the given seed. It is intended to be used in A/B
experiments to determine the average effect of a change on program
performance, while controlling for effects such as false sharing in
the cache which may introduce measurement bias. For more details,
see the RFC:
https://discourse.llvm.org/t/rfc-lld-feature-for-controlling-for-code-size-dependent-measurement-bias/83334
Reviewers: smithp35, MaskRay
Reviewed By: MaskRay, smithp35
Pull Request: https://github.com/llvm/llvm-project/pull/117653
2024-12-13 11:52:09 -08:00
Fangrui Song
04996a28b7
[ELF] Rename target-specific RelExpr enumerators
...
RelExpr enumerators are named `R_*`, which can be confused with ELF
relocation type names. Rename the target-specific ones to `RE_*` to
avoid confusion.
For consistency, the target-independent ones can be renamed as well, but
that's not urgent. The relocation processing mechanism with RelExpr has
non-trivial overhead compared with mold's approach, and we might make
more code into Arch/*.cpp files and decrease the enumerators.
Pull Request: https://github.com/llvm/llvm-project/pull/118424
2024-12-03 09:17:17 -08:00
Fangrui Song
1cd627562b
[ELF] Remove unneeded Twine in ELFSyncStream
2024-11-24 12:13:02 -08:00
Fangrui Song
c4dc5ed825
[ELF] Avoid some toStr and ErrAlways
2024-11-24 11:43:40 -08:00
Fangrui Song
a5af6214dd
[ELF] Make SyntheticSection parameter order match InputSection
...
And rename `/*alignment=*/` to `/*addralign=*/`
2024-11-23 15:16:36 -08:00
Fangrui Song
43e3871a32
[ELF] Make section member orders consistent
...
SectionBase, InputSectionBase, InputSection, MergeInputSection, and
OutputSection have different member orders. Make them consistent and
adopt the order similar to the raw Elf64_Shdr.
2024-11-23 14:22:24 -08:00
Fangrui Song
a52032448e
[ELF] Avoid make<PhdrEntry>
...
Store them in Partition::phdrs instead.
2024-11-19 22:38:14 -08:00
Fangrui Song
5b1b6a62b8
[ELF] Make elfHeader/programHeaders unique_ptr
...
This removes some SpecificAlloc instantiations, makes lld smaller, and
drops the small memory waste due to the separate BumpPtrAllocator.
2024-11-17 00:25:42 -08:00
Fangrui Song
53dc4e7600
[ELF] createSyntheticSections: replace some make<> with unique_ptr
...
This removes some SpecificAlloc instantiations and makes lld smaller.
This drops the small memory waste due to the separate BumpPtrAllocator.
2024-11-17 00:09:06 -08:00
Fangrui Song
2991a4e209
[ELF] Replace functions bAlloc/saver/uniqueSaver with member access
2024-11-16 22:34:13 -08:00
Fangrui Song
483516fd83
[ELF] Remove unneeded Twine()
2024-11-16 20:32:44 -08:00
Fangrui Song
73bb022b46
[ELF] Remove global ctx
...
This commit completes the work that eliminates global variables like
config/target/inputSections/symTab from lld/ELF.
Key changes:
* Introduced `lld::elf::ctx` to encapsulate global state.
* Moved global variables into `Ctx lld::elf::ctx`
* Updated many functions to accept `Ctx &ctx`
* Made `ctx` a local variable (this commit)
If we don't count `static std::mutex`, this is the last major global
state within lld/ELF (minor ones like `SharedFile::vernauxNum`
(33ff9e43b4 ) might not all be eliminated
yet).
2024-11-16 17:24:11 -08:00
Fangrui Song
33ff9e43b4
[ELF] Move SharedFile::vernauxNum to Ctx
2024-11-16 17:00:51 -08:00
Fangrui Song
7d13775486
[ELF] Pass ctx &
2024-11-16 15:48:01 -08:00
Fangrui Song
a626eb2a2f
[ELF] Pass ctx to bAlloc/saver/uniqueSaver
2024-11-16 15:20:21 -08:00
Fangrui Song
58a971f42f
[ELF] Replace contex-less toString(x) with toStr(ctx, x)
...
so that we can remove the global `ctx` from toString implementations.
Rename lld::toString (to lld::elf::toStr) to simplify name lookup (we
have many llvm::toString and another lld::toString(const llvm::opt::Arg
&)).
2024-11-16 11:58:10 -08:00
Fangrui Song
d69cc05bcf
[ELF] Migrate away from global ctx
2024-11-14 22:30:29 -08:00
Fangrui Song
e24457a330
[ELF] Migrate away from global ctx
2024-11-14 22:17:10 -08:00
Fangrui Song
c13258ac49
[ELF] Replace log with Log(ctx)
2024-11-07 09:30:20 -08:00
Fangrui Song
9b058bb42d
[ELF] Replace errorOrWarn(...) with Err
2024-11-06 22:33:51 -08:00
Fangrui Song
f8bae3af74
[ELF] Replace warn(...) with Warn
2024-11-06 22:19:31 -08:00
Fangrui Song
09c2c5e1e9
[ELF] Replace error(...) with ErrAlways or Err
...
Most are migrated to ErrAlways mechanically.
In the future we should change most to Err.
2024-11-06 22:04:52 -08:00
Fangrui Song
63c6fe4a0b
[ELF] Replace fatal(...) with Fatal or Err
2024-11-06 21:17:26 -08:00
Fangrui Song
861bd36bce
[ELF] Pass Ctx & to Symbol::getVA
2024-10-19 20:32:58 -07:00
Fangrui Song
fe8af49a1b
[ELF] Pass Ctx & to Defined & CommonSymbol
2024-10-20 01:38:16 +00:00
Fangrui Song
682925ef43
[ELF] Pass Ctx & to Partition
2024-10-15 22:58:07 -07:00
Fangrui Song
0dbc85a59f
[ELF] Pass Ctx & to Arch-specific code
2024-10-13 11:08:06 -07:00
Fangrui Song
002ca63b3f
[ELF] Pass Ctx & to (read|write)(16|64)
2024-10-13 10:47:18 -07:00
Fangrui Song
38dfcd9ac9
[ELF] Pass Ctx & to read32/write32
2024-10-13 10:37:47 -07:00
Fangrui Song
a3bad9adcb
[ELF] Pass Ctx &
2024-10-12 09:56:05 -07:00
Fangrui Song
dbd197118d
[ELF] Pass Ctx & to Symbol
2024-10-11 23:34:43 -07:00
Fangrui Song
dd326b1225
[ELF] Pass Ctx &
2024-10-11 21:10:05 -07:00
Fangrui Song
d0606c265e
[ELF] Make .comment have a non-full file
...
This ensures that SectionBase::file is non-null except
InputSection::discarded.
2024-10-11 20:55:21 -07:00
Fangrui Song
9bf2e20b17
[ELF] Pass Ctx & to OutputSection
2024-10-11 20:28:58 -07:00
Fangrui Song
6dd773b650
[ELF] Pass Ctx &
2024-10-11 20:15:02 -07:00
Fangrui Song
1c28f31133
[ELF] Pass Ctx &
2024-10-11 18:35:02 -07:00
Fangrui Song
81bd712f92
[ELF] Revert Ctx & parameters from SyntheticSection
...
Since Ctx &ctx is a member variable,
1f391a75af
7a5b9ef54e
e2f0ec3a3a can be reverted.
2024-10-10 23:43:21 -07:00
Fangrui Song
d91c103a10
[ELF] Pass Ctx & to SyntheticSections
2024-10-10 23:28:25 -07:00
Fangrui Song
25cda9e069
[ELF] Pass Ctx & to SyntheticSection
2024-10-10 23:07:02 -07:00
Fangrui Song
cfd3289a1f
[ELF] Pass Ctx & to some free functions
2024-10-06 19:36:21 -07:00
Fangrui Song
5f6346190c
[ELF] Pass Ctx & to SyntheticSections
2024-10-06 17:23:16 -07:00
Fangrui Song
acb2b1e779
[ELF] Pass Ctx & to Symbols
2024-10-06 16:59:04 -07:00
Fangrui Song
2b5cb1bf62
[ELF] getRelocTargetVA: pass Ctx and Relocation. NFC
2024-10-06 16:34:09 -07:00
Fangrui Song
b3e0bd3d28
[ELF] Pass Ctx & to Arch/
2024-10-06 00:31:51 -07:00
Fangrui Song
6d03a69034
[ELF] Pass Ctx & to Arch/
2024-10-06 00:14:12 -07:00
Fangrui Song
67c0846357
[ELF] Don't call getPPC64TargetInfo outside Driver. NFC
...
getPPC64TargetInfo should only be called once per link invocation.
2024-10-05 10:29:25 -07:00
Fangrui Song
e2f0ec3a3a
[ELF] Pass Ctx & to SyntheticSection::getSize
2024-10-03 22:53:07 -07:00
Fangrui Song
7a5b9ef54e
[ELF] Pass Ctx & to SyntheticSection::writeTo
2024-10-03 20:56:09 -07:00
Fangrui Song
1f391a75af
[ELF] Pass Ctx & to SyntheticSection::finalizeContents
2024-10-03 20:45:40 -07:00