Investigate removing libGCC symbols from RtsSymbols.c
The RTS is currently re-exporting symbols from the C compiler runtime in
How this works is that the Runtime linker is declaring that it can provide these symbols because it's been linked against the C compiler library itself. In essence it's providing pointers to it's own symbol table.
This Is fine but has two downsides:
We have to keep adding symbols to export anytime the underlying C compiler changes things or someone needs a new symbol from the library.
User code that is linking explicitly against these libraries will probably generate a duplicate symbols error if it needs a symbol we have not yet exported but is in the same object file or dependency of a symbol we have exported.
One solution would be to add
libgcc_s to the dependencies of
ghc-prim which is the package that seems to require them.
This has two issues with it:
GCC_S doesn't exist for llvm, so we need to somehow know which compiler we're compiling for.
Secondly on Windows
GCC_S is an import library with a non-standard name. (.a instead of .dll.a) and we currently cannot recognize it as such. We'd try to load it as a normal archive and end up trying to execute ascii as code.
This task is to find a way to remove the need to export these symbols yet still work with both GCC and LLVM.
|Component||Runtime System (Linker)|