llvm-project/lld/MachO/ld64-vs-lld.rst

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

32 lines
1.2 KiB
ReStructuredText
Raw Normal View History

==================
LD64 vs LLD-MACHO
==================
This doc lists all significant deliberate differences in behavior between LD64 and LLD-MachO.
String literal deduplication
****************************
LD64 always deduplicates string literals. LLD only does it when the `--icf=` or
the `--deduplicate-literals` flag is passed. Omitting deduplication by default
ensures that our link is as fast as possible. However, it may also break some
programs which have (incorrectly) relied on string deduplication always
2022-01-20 15:59:12 +08:00
occurring. In particular, programs which compare string literals via pointer
equality must be fixed to use value equality instead.
``-no_deduplicate`` Flag
**********************
- LD64:
* This turns off ICF (deduplication pass) in the linker.
- LLD
* This turns off ICF and string merging in the linker.
ObjC symbols treatment
**********************
There are differences in how LLD and LD64 handle ObjC symbols loaded from archives.
- LD64:
* Duplicate ObjC symbols from the same archives will not raise an error. LD64 will pick the first one.
* Duplicate ObjC symbols from different archives will raise a "duplicate symbol" error.
- LLD:
* Duplicate symbols, regardless of which archives they are from, will raise errors.