<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/91055>91055</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            `--retain-symbols-file` is not compatible with GNU
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            lld:ELF
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          rui314
      </td>
    </tr>
</table>

<pre>
    It looks like lld uses `--retain-symbols-file` to control whether a symbol is put into .dynsym or not. However, for GNU ld, the option doesn't seem to have any effect on .dynsym. Instead, it controls whether a symbol is put into the output .symtab or not.

Here is a test script:

```shell
cat <<EOF | cc -c -o a.o -xc -
void foo() {}
void bar() {}
void baz() {}
EOF

cat <<EOF > symbols
foo
baz
EOF

cc -shared -o b.so a.o -Wl,--retain-symbols-file=symbols
nm b.so
readelf -W --dyn-syms b.so

cc -fuse-ld=lld -shared -o c.so a.o -Wl,--retain-symbols-file=symbols
nm c.so
readelf -W --dyn-syms c.so
```

You can see that the symbols in .dynsym and .symtab are different between lld and GNU ld.

```
$ bash -x /tmp/foo
+ cat
+ cc -c -o a.o -xc -
+ cat
+ cc -shared -o b.so a.o -Wl,--retain-symbols-file=symbols
+ nm b.so
000000000000110f T baz
00000000000010f9 T foo
+ readelf -W --dyn-syms b.so

Symbol table '.dynsym' contains 8 entries:
   Num:    Value          Size Type Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL DEFAULT  UND
     1: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __cxa_finalize
     2: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_registerTMCloneTable
     3: 0000000000000000     0 NOTYPE  WEAK DEFAULT  UND _ITM_deregisterTMCloneTable
     4: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
     5: 00000000000010f9    11 FUNC    GLOBAL DEFAULT   10 foo
     6: 0000000000001104    11 FUNC GLOBAL DEFAULT   10 bar
     7: 000000000000110f    11 FUNC    GLOBAL DEFAULT   10 baz
+ cc -fuse-ld=lld -shared -o c.so a.o -Wl,--retain-symbols-file=symbols
+ nm c.so
0000000000001674 t bar
000000000000167f T baz
0000000000003888 b completed.0
 w __cxa_finalize
00000000000015b0 t deregister_tm_clones
0000000000001620 t __do_global_dtors_aux
00000000000026f0 d __do_global_dtors_aux_fini_array_entry
0000000000003860 d __dso_handle
0000000000002700 d _DYNAMIC
00000000000016a8 t _fini
0000000000001669 T foo
0000000000001660 t frame_dummy
00000000000026f8 d __frame_dummy_init_array_entry
0000000000000530 r __FRAME_END__
0000000000003868 d _GLOBAL_OFFSET_TABLE_
 w __gmon_start__
000000000000168c t _init
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
00000000000015e0 t register_tm_clones
0000000000003868 d __TMC_END__
0000000000003868 d __TMC_LIST__
+ readelf -W --dyn-syms c.so

Symbol table '.dynsym' contains 7 entries:
   Num:    Value          Size Type    Bind   Vis Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
 1: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
 2: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTable
     3: 0000000000000000     0 NOTYPE  WEAK DEFAULT  UND _ITM_registerTMCloneTable
     4: 0000000000000000     0 FUNC WEAK   DEFAULT  UND __cxa_finalize
     5: 0000000000001669    11 FUNC GLOBAL DEFAULT   10 foo
     6: 000000000000167f    11 FUNC    GLOBAL DEFAULT   10 baz
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysV19P474S_TTuyyiV66Rp-9CH0ja76EK5upS72qfISSaN7zpxZTtA99NfOf2XQlhY-EUIYmZ8fMY-MxNzY8SmQpyS4RUZLnq8toXSU10LfxD0EpXtptcWpFK_DEjxC0HKDGqDBkhIPU-j5aLyzK5MlDReLiSSkIJVkKrKaiXhqUBboAYOeycQBra1BVFZBf1sV5ldCUpDpWwfvqsnfERN2BxypeHb6gFk5ka2QFBbK1QFmUJTETayYBBLt1TBHxF4tQPMc0wtqOoI3IfryljkDYawR1Lmz6yaxWrrxn2zKy1PjgQJXRA62__-jhrdNA4WjQWTarG1xJ-1fUhI9z-mQCn3_0u5BeLPiT9f3kVARnNIU_BS8BTwvgLvOQVv7_moRAa5UoSNCZsAGV2R0aJlSrh-2_S7w7S8i9rsXjDxl4fNMHuzW7l5cWCd81PwTME1Zo580jeHCH5Iwubd2vAXF0tUZTNtP9DIM5Q5eD_A87JdM9O07OdF89qgJzPiL5waWxzSz3FI3-Fwtp8OtE3pp6oh5ZXTI9iC20ZAhzVAnMQIvMpOguIaIRN5jhorCwnaJ8SqSS7ntRd-v1NKhyELIOGmAO8ZCItsuSUsOp0YYVeQctsavCGxTsevnalDuThX2noGA5rDGk6KurDRfAJruAjiY5q43-ew5YlEIGx02HDCRk3Gc1EZGANWVgs0pxQFgFVdEt-9wH-5rBFOz734jbDebRGuRJU5uzB7yyp7hhUv8YQBQB0GffHsLbC6W__89xLg5m4-u4HFMpo93KwBHlaLFsDgAwA_lrN_AVwgQBynzzzORcWl-N1mxD4LeL2-jTVuhLGo17dzqSpcu11tYfsfxX6NnOE72MGnN2JTqio2lmsbxy3A4UvARmRuywcQPazm7vXbzd1V-2xgQM8ibFDCVygDGrRRuiBcdT5DjDog8g8QOWXKMTn_0dp3yNW0O1fDUQD2HMcL25t57I_HY0ggVeVWosWsfyhZ8NQp2AvYYULBwlknsS3j1CnFdHFgzjmOMxVvpEq4jDOrtIl5_fzam4U5hazb2zESMdea72JXJXZdQYWH6UbFBa8y2UGfjWjjtPi5mt1ez7so87Gj7NbrsoYXBfCFzQWba15inNVl2cGRhfm44djyikUl7J9Do0OfgoY4jv4zu13Gy9XimEIvNqAB34s0voui--U6Xs-ubpZx63xf5-FlFOPUxe9ItZKj_Tx9sFR0zHl7xqXG0O3kRxR2jDle387f25fG5-b6fn10ert9pZ9oX6NPti-Adgf7UvPq6l6f71wdBftLXetdwXyhb32hazW1_a969-uW5crCO83mvX7lyvXfNJvjx2Yvm_rZxJ_wHk4Ho0EwHgwn1O8VUz8bUpoHOWeUJmGYhkE4ohjgeJKnk1FIe2LKKAvokAZ0Egyp3x8kgY_DIBgGWZgMmE8CiiUXsi_lY9lXetMTxtQ4nQzocNiTPEFpmlspY9L1u9nyJiKMuUuqnro5XlJvDAmoFMaaM4oVVuL0T7dTYdxlrmlQ3AqXdE_CFu6ju1drOS2s3TZpxiLCoo2wRZ30U1USFrlFDn-8rVb_w9QSFjW8DWFRQ_3_AQAA__9StD_F">