Hi All,
I am running into a symbol redefinition error during an LTO recompile of the combined IR module.
The issue is caused by a function definition whose body contains a label that is declared global and defined via asm() statements like so:
__attribute__((section(“.text.myfunc”))) void myfunc(void) {
…
__asm(" .global my_special_label");
__asm(“my_special_label: nop”);
…
}
If the above function definition is inlined multiple times during the LTO recompile, the integrated assembler will detect and diagnose that “my_special_label” has multiple definitions.
I am looking at ways to avoid the symbol redefinition error issue automatically without requiring the user to modify their code.
One potential solution is to detect an instance of such a label definition during a pre-optimization pass and mark the enclosing function with a “noinline” attribute.
I’m wondering if anyone else has encountered this problem in the context of LTO and what was done to address it.
Any thoughts?
Thanks and Regards,
Todd Snider