Investigate removing libGCC symbols from RtsSymbols.c
The RTS is currently re-exporting symbols from the C compiler runtime in RtsSymbols.c.
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.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.0.1 |
| Type | Task |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Runtime System (Linker) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |