Commit f41c27d3 authored by Tamar Christina's avatar Tamar Christina Committed by Ben Gamari
Browse files

Slighly clean up symbol loading error.

The symbol not found error that is triggered
during lazy-loading was a bit chaotic before.

This reformats it a bit to:

```
ghc-stage2.exe:  | E:\...\libLLVMSupport.a: unknown symbol `_ZN4llvm5APIntC1Ejyb'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZN4llvm5APInt14AssignSlowCaseERKS0_'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZN4llvm13ConstantRangeC1ENS_5APIntES1_'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZN4llvm14FoldingSetImplC2Ej'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZN4llvm15LLVMContextImplD1Ev'
ghc-stage2.exe:  | E:\...\libLLVMLTO.a: unknown symbol `_ZN4llvm11LLVMContextD1Ev'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZNK4llvm5Value10getContextEv'
ghc-stage2.exe: ^^ Could not load 'LLVMIsMultithreaded', dependency unresolved.
See top entry above.
```

I have also thought about also showing the demangled names, as it may
be useful for the end user.

`libgcc` seems to provide a method for this so we wouldn't need any
extra dependency.

Any thoughts on this or would it not be useful?

Reviewers: austin, erikd, simonmar, bgamari

Reviewed By: bgamari

Subscribers: RyanGlScott, thomie, #ghc_windows_task_force

Differential Revision: https://phabricator.haskell.org/D3027

GHC Trac Issues: #13093, #13113
parent 55935738
......@@ -870,12 +870,11 @@ SymbolAddr* loadSymbol(SymbolName *lbl, RtsSymbolInfo *pinfo) {
/* Symbol can be found during linking, but hasn't been relocated. Do so now.
See Note [runtime-linker-phases] */
if (oc && oc->status == OBJECT_LOADED) {
if (oc && lbl && oc->status == OBJECT_LOADED) {
oc->status = OBJECT_NEEDED;
IF_DEBUG(linker, debugBelch("lookupSymbol: on-demand loading symbol '%s'\n", lbl));
int r = ocTryLoad(oc);
if (!r) {
errorBelch("Could not on-demand load symbol '%s'\n", lbl);
return NULL;
}
......@@ -893,6 +892,10 @@ SymbolAddr* lookupSymbol( SymbolName* lbl )
{
ACQUIRE_LOCK(&linker_mutex);
SymbolAddr* r = lookupSymbol_(lbl);
if (!r) {
errorBelch("^^ Could not load '%s', dependency unresolved. See top entry above.\n", lbl);
fflush(stderr);
}
RELEASE_LOCK(&linker_mutex);
return r;
}
......
......@@ -1326,7 +1326,7 @@ ocResolve_PEi386 ( ObjectCode* oc )
S = (size_t) lookupSymbol_( (char*)symbol );
if ((void*)S == NULL) {
errorBelch("%" PATH_FMT ": unknown symbol `%s'\n", oc->fileName, symbol);
errorBelch(" | %" PATH_FMT ": unknown symbol `%s'", oc->fileName, symbol);
return false;
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment