[PATCH] D69607: Add a feature to explain why some file gets included to the linker's output

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 31 02:02:42 PDT 2019


grimar added inline comments.


================
Comment at: lld/ELF/Explain.cpp:175
+  error("--explain: no such file or symbol: '" + name +
+        "'. Use --verbose option to see a list of input files.");
+  return nullptr;
----------------
But it doesn't seem helps for the case mentioned in the description?

If we have a `main.o` compiled from
```
.global _start;
_start:
callq foo
```

And a `foo.a` which contains a `foo.o` compiled from

```
.globl foo;
foo:
```

Then when I invoke `-flavor gnu main.o foo.a "-o" out --verbose` I see:
```
lld: main.o
lld: foo.a
```

Then, like a possible normal user :) I do:
`-flavor gnu --explain=foo.a main.o foo.a "-o" out --verbose`

and I see:

```
lld: main.o
lld: foo.a
lld: error: --explain: no such file or symbol: 'foo.a'. Use --verbose option to
see a list of input files.
```

How I am supposed to realise that I should invoke `-flavor gnu --explain=foo.a(foo.o) main.o foo.a "-o" out --verbose`
to see the following?

```
lld: main.o
lld: foo.a
Explain: This is why 'foo.a(foo.o)' is linked:
Explain:
Explain: '(--entry option)' uses '_start' defined in 'main.o'
Explain: which uses 'foo' defined in 'foo.a(foo.o)'
```



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D69607/new/

https://reviews.llvm.org/D69607





More information about the llvm-commits mailing list