<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">