[LLD][COFF] Ignore DEBUG_S_XFGHASH_TYPE/VIRTUAL
[llvm-project.git] / lld / MachO / ld64-vs-lld.rst
blob3601c224f95b0bc8fa84040fbf9faf7c9b69dfda
1 ==================
2 LD64 vs LLD-MACHO
3 ==================
5 This doc lists all significant deliberate differences in behavior between LD64 and LLD-MachO.
7 String Literal Deduplication
8 ****************************
9 LD64 always deduplicates string literals. LLD only does it when the ``--icf=``
10 or the ``--deduplicate-literals`` flag is passed. Omitting deduplication by
11 default ensures that our link is as fast as possible. However, it may also break
12 some programs which have (incorrectly) relied on string deduplication always
13 occurring. In particular, programs which compare string literals via pointer
14 equality must be fixed to use value equality instead.
16 String Alignment
17 ****************
18 LLD is slightly less conservative about aligning cstrings, allowing it to pack
19 them more compactly. This should not result in any meaningful semantic
20 difference.
22 ``-no_deduplicate`` Flag
23 ************************
24 - LD64:
25    * This turns off ICF (deduplication pass) in the linker.
26 - LLD
27    * This turns off ICF and string merging in the linker.
29 ObjC Symbols Treatment
30 **********************
31 There are differences in how LLD and LD64 handle ObjC symbols loaded from archives.
33 - LD64:
34    * Duplicate ObjC symbols from the same archives will not raise an error. LD64 will pick the first one.
35    * Duplicate ObjC symbols from different archives will raise a "duplicate symbol" error.
36 - LLD:
37    * Duplicate symbols, regardless of which archives they are from, will raise errors.