<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/91460>91460</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[lld] --exclude-libs,ALL fails to work with both lto and version script is on
</td>
</tr>
<tr>
<th>Labels</th>
<td>
lld
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
mvpjox2233
</td>
</tr>
</table>
<pre>
I tried to build my project with both lto, version script and exclude-libs,ALL. The result shows that the symbol in static library is global in the output file. I also tried with gcc and the same symbol is local.
Here is my test:
```
#====a.cpp====
#include <stdio.h>
void a()
{
printf("func a\n");
}
#====b.cpp====
#include <stdio.h>
void b()
{
printf("func b\n");
}
#====c.cpp====
#include <stdio.h>
void c()
{
printf("func c\n");
}
#====main.cpp====
#include <stdio.h>
void a();
void b();
void c();
int main()
{
a();
b();
c();
printf("func main\n");
}
#====map.txt====
{
global:
extern "C++" {
a*;
b*;
c*;
};
local:
*;
};
```
build command:
```
CC=/usr/workspace/clang+llvm-18.1.4-x86_64-linux-gnu-ubuntu-18.04/bin/clang++
AR=/usr/workspace/clang+llvm-18.1.4-x86_64-linux-gnu-ubuntu-18.04/bin/llvm-ar
${CC} -c a.cpp -flto -fvisibility=default -o a.lto
${CC} -c b.cpp -flto -fvisibility=default -o b.lto
${CC} -c c.cpp -flto -fvisibility=default -o c.lto
${CC} -c main.cpp -flto -fvisibility=default -o main.lto
${AR} -cr s.lta a.lto b.lto c.lto
${CC} -flto main.lto -Wl,--whole-archive s.lta -Wl,--no-whole-archive -shared -o main.ltout -fvisibility=default -Wl,--exclude-libs,ALL -fuse-ld=lld
```
The symbol table of `main.ltout` is :
```
6: 0000000000001680 20 FUNC GLOBAL DEFAULT 11 _Z1av
7: 00000000000016a0 20 FUNC GLOBAL DEFAULT 11 _Z1bv
8: 00000000000016c0 20 FUNC GLOBAL DEFAULT 11 _Z1cv
```
With `CC=g++` and `AR=ar` in build command, the symbol table can be:
```
11: 0000000000001146 26 FUNC LOCAL DEFAULT 14 _Z1av
12: 0000000000001160 26 FUNC LOCAL DEFAULT 14 _Z1bv
13: 000000000000117a 26 FUNC LOCAL DEFAULT 14 _Z1cv
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVtvO2jgQfhpzM0pkOyHABRcQym4ltJWqVpX2prIdh7jrxCh2-OHtV3Y4H_7S7kYRCnP45puJZzLMWrVupJyi4RwNFwPWucq003q7-WF2lCbJgJtiP_0IrlWyAGeAd0oXUO9h05ofUjh4U64CblwF2hlEc9jK1irTgBWt2jhgTQFyJ3RXyEgrbhHNZ6tVDF8qCa20nXZgK_NmwVXMgask2H3NjQbVgHXMKQFa8Za1e1AW1tpwFnTe0nRu0zkolZYxfASmrTkwDazWQoTwAZTVZ2QL2gimY4QXCM_63z9lK72m3oOT1qHkIEcZPtz9X5qgZHG6WSw2m0vByUo1IWdASW5doUxcoeRDr90aVQBDdIzo5GA_mvcPsGlV48qgo2XXCGBomDeIUm-bzI_mi4ds-G-z4Y_ZANwT4r9ASPw2IfE6IfELhGqmmv_8yo5Brip3JRQ3QtU48KGfJnUL7WW3yF52C3xfjRDmvYI8Lssmdjv3oConkn3nndoCDpfcOdk2gCjNEZ2Hm8JVaseLITq7yuV48SuFeGTm2V_KQvueuVy6XJre9m747SeYMHXNmuJZm-e5LwFddrZFdPlm2n_shgmJ6FJo1qwRnWu9rSMyjkmcRrtx9j1LI62abhetmy7qeNe4zqtxiuiS-zd_8vR3CDL7_P8HCR6sPb7lFI3meY5GC4gEhGEFUamdgajcKqu40srtUbIoZMn8KI4MsNgP8kf-_CV__tRfvOQvnvofm_enEMHwBmX2uUdpwcbasT7NnuzTkCHMEQyibxrRPIreKqNlxFpRqa08oB11jblRR7ZirSwuWXXuKfUDyv33EqKyszLSBUoWWhfvHO8v5y-oY1xLMCWgDJ-Dowz779yzkx_6LUPJDPDFRbIx9gqKYfn1r9w__rH6NJ-tYPFhOfu6-uIlhMD3vwnbXgCN7oHYT4B6FH6JMr5HEa_SEdt3ivXNrwkow6Hdj72Z4bA1oAyHBmVtqFgD14OD5pfLSl9qwRrg8r3KEnKXCkmzkEp2SmX1KZ-t4FyQ9LashN6jZPh9FO-W3laWJPdAI_Yi0F1lB8U0KSbJhA3klIzIkGTZOCODasqwHKcTQTAhWIzKTFI6EgWblFRkk2GZDtSUYpriIR4TQlJKYizHRSnEeDQcZcN0QlGKZc2Ujv18i027HihrOzmdkDTDA8241DYssZT69qDUb7PtNExD3q0tSrFW1tmzv1NOh73X2w8X8LDrSqa09WuvH87Xq244Ize7rrJgmkHX6mnl3Mb6g0CXiC7XylUdj4WpDxP6OKgPSzSiy5CORXQZMvo3AAD__xv7KFI">