<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/72404>72404</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
ld64.lld: Linker doesn't create empty text section for shared library without any code
</td>
</tr>
<tr>
<th>Labels</th>
<td>
lld
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
lewurm
</td>
</tr>
</table>
<pre>
... which sounds reasonable, but breaks an assumption in `install_name_tool`:
```
$ cat myfoobar.c
int foobar(int a, int b) {
return a + b;
}
$ clang -v -dynamiclib myfoobar.c -o liba.dylib
$ clang -v -dynamiclib -o libdummy-ld64.dylib -L`pwd` -la
$ clang -v -dynamiclib -o libdummy-lld.dylib -fuse-ld=/path/to/ld64.lld -L`pwd` -la
$ otool -l libdummy-ld64.dylib
libdummy-ld64.dylib:
Load command 0
cmd LC_SEGMENT_64
cmdsize 152
segname __TEXT
vmaddr 0x0000000000000000
vmsize 0x0000000000004000
fileoff 0
filesize 16384
maxprot 0x00000005
initprot 0x00000005
nsects 1
flags 0x0
Section
sectname __text
segname __TEXT
addr 0x0000000000004000
size 0x0000000000000000
[...]
$ otool -l libdummy-lld.dylib
libdummy-lld.dylib:
Load command 0
cmd LC_SEGMENT_64
cmdsize 72
segname __TEXT
vmaddr 0x0000000000000000
vmsize 0x0000000000004000
fileoff 0
filesize 16384
maxprot 0x00000005
initprot 0x00000005
nsects 0
flags 0x0
[...]
$ install_name_tool -id @rpath/liba.dylib libdummy-ld64.dylib # works fine
$ install_name_tool -id @rpath/liba.dylib libdummy-lld.dylib
error: /Applications/Xcode15beta8.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: changing install names or rpaths can't be redone for: libdummy-lld.dylib (for architecture arm64) because larger updated load commands do not fit (the program must be relinked, and you may need to use -headerpad or -headerpad_max_install_names)
```
The error message is a bit misleading. If I understand correctly `install_name_tool` just assumes that `__text` exists:
* https://github.com/opensource-apple/cctools/blob/fdb4825f303fd5c0751be524babd32958181b3ed/misc/install_name_tool.c#L763-L778
* https://github.com/opensource-apple/cctools/blob/fdb4825f303fd5c0751be524babd32958181b3ed/misc/install_name_tool.c#L842-L849
Using `-Wl,-add_empty_section,__TEXT,__text` fixes the problem, but I think it would be nice if `ld64.lld` has the same behaviour in that area.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUVk9v4zoO_zTKhbDhyH-SHHLon_FigO5epoudW0BJdKypLBmS3Db76R_kJE1nJtPBw7u8ZxSNLVIkf_xRpDAEvbdEW1bfsvp-gVPsnd8aepn8sBBOHbZ5nsNLr2UPwU1WBfCEwVkUhhi_AzFFEJ7wKQBawBCmYYzaWdAWWFNoGyIas7M40C46Z1hTsPKGFfesOP9vitPf8ZNXIDHCcOicE-hzeVzXNsJxhfF1-sDkPr0IxjfAVrdHPQAAT3HyFhAYvwXBypOIre7f-TBo95A9Q6YOFgctjRbvnELmwGiBuToYLX6z7airpmE4ZEY11XETZA-sKcYXxZoCMoN_xohRZxvdFCgzipX3jLcjxp7xNjrG29mRMerXblxKOGTmWnBHrWuCMzsPDhVINwxoFRSX5ALIQcHD3e7Lp3_9-9N_HndNdRbKQQX9f4Jlzc9LgfaJe9jtHj99fTytPg-olIfitfjhefPyPMyGvteo3ml02pDrurfA0vfRd1Ou3wIa8HX0Ll7s1CeJtjpelwDYQDIGWF4gdwb3Iakel76QTCV-gSjjCWOk1_i27Sr0K8Dfw0rPFeSX3LD6Ns9zVt9_SPO5fH5k-W39Q5J_y-_qY3rhn0Fw8UuCryT5p0YGmVbAqsKfzuSlWVztBYyX8OL8U4BOW_qrdr_nl7x3npU3wHh7M45GS0z1GRhvv0qnaFkLirjOcRwZb--cjWRjkt7TMxk3kme8fXTOyB71Zds9dTiZmL_KeJYx3k4haYv5_efuXt6A7NHutd2foUGSBnAeZkgBJFrGVxEEgSflLEF3DP9K-2N83TkP6GWvI8k4eQL0Q1Olni9I4hQIDPo9eZhGhZEUmHc1HUA5sC5Cp2MyFnuC0bu9xwGGKZyCMNo-kUrzJB2Dg5tgwANYIgXRQXKR9YSK_IgqAbl87QZ83b1PQ2B8c3WuPfYEM1EwUAi4J9ABEISOMOhgCJW2-xzgcwefYbKKfIgpGum8JxnN4VfjFL4lHPPkpQCxx5g0T72oKYBedYjhMnT5DfQxjvMKbxlv9zr2k8ilGxhv3Ug2uMlLynAc04xv5cx_KgthnGC87ZSo1rzuyqLsVC2LVb0UVPNKoFAl39Tr5XopypTQdtBBXiuUXDJePqyaMntYrdZ_v8jWFc8e1tXm_UXlvyFVNWuK7H-G8bsMldrRMMbDLpwGAr879cH0cs5_p19nXubCE4aG87XpM8Re2yfQEV7cZFSqRaslge6Sl_N8TzZ6PFoIqdcK6vFZu8mnO9bMN3rCfKG2pdqUG1zQdrkqiqLhfLNe9NuyFiiLckOqLlQhGtmVXb3ccFzJBrtVudBbXvByuVzWy7pclutcrFW5rqiuu64r67pkVUEDapMb8zzkzu8XOoSJtiteFdXCoCAT5isk5ylgztNd0m-TdiamfWBVYVIRXvZHHQ1t3yCWN_CQzqAH5Sgc24P0hJFgzjCkZMIpzaldQOjRp7OuhUd_gBcdezdFQHuA1LsWkzfbD4opBXL6yUbvvpGMqRgSqlROM7A_AgAA___7xHLO">