https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84901
Bug ID: 84901 Summary: --dynamic-list=export is ignored in presence of -flto Product: gcc Version: 7.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: lto Assignee: unassigned at gcc dot gnu.org Reporter: avkhatskevich at gmail dot com CC: marxin at gcc dot gnu.org Target Milestone: --- Created attachment 43677 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=43677&action=edit reproducer Hello. In a project, I want to export some symbols with `dynamic-list` ld option and use lto optimizations, but I face the following behavior: Compiling without LTO - symbols from `export` are exported (presented in .dynsym). Compiling with LTO - nothing is exported. Compiling with LTO + `-rdynamic` EVERYTHING is exported, but performance decreased. Linking with gold - the same result. Compiling with clang (4.0.1-6) - the same result. Unexpectedly, `__attribute__((used))` added to symbols I want to export helps, but it looks like a "crutch". Here is a gist with a small reproducer [https://gist.github.com/Khatskevich/54771081aefbc8420d79fdcfb65d2662](gist) (I have also attached as a tar archive) I believe that it is wrong behavior because `dynamic-list` or `__attr(used)` helps. The behavior I expect: symbols passed through `dynamic-list` are exported without any `__attr(used)`. P.S. 1. GCC version 7.2.0 2. At this point, can I somehow pass a list of attributes that I want to preserve in another way (as a file for example)? I do not want to spoil code base. 3. I need exported symbols to inceract with them with `ffi` lua module.