[PATCH] D44336: Implement --cref.

Rafael Ávila de Espíndola via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 12 13:47:09 PDT 2018


rafael added a comment.

Rui Ueyama via Phabricator via llvm-commits
<llvm-commits at lists.llvm.org> writes:

> +defm cref: B<"cref",
>  +    "Output cross reference table",
>  +    "Do not output cross reference table">;
>  +

Why B? Is there a --no-cref?

> +// Output a cross reference table to stdout. This is for --cref.
>  +//
>  +// For each global symbol, we print out a file that defines the symbol
>  +// followed by files that uses that symbol. Here is an example.
>  +//
>  +//     strlen     /lib/x86_64-linux-gnu/libc.so.6
>  +//                tools/lld/tools/lld/CMakeFiles/lld.dir/lld.cpp.o
>  +//                lib/libLLVMSupport.a(PrettyStackTrace.cpp.o)
>  +//
>  +// In this case, strlen is defined by libc.so.6 and used by other two
>  +// files.
>  +void elf::writeCrossReferenceTable() {
>  +  if (!Config->Cref)
>  +    return;
>  +
>  +  // Collect symbols and files.
>  +  MapVector<Symbol *, SetVector<InputFile *>> Map;
>  +  for (InputFile *File : ObjectFiles) {
>  +    for (Symbol *B : File->getSymbols()) {

I would probably avoid B since it is a strange choice now that
SymbolBody is gone.

> +      if (auto *Sym = dyn_cast<SharedSymbol>(B))

This can be an isa<>, no?

> +        Map[Sym].insert(File);
>  +      if (auto *Sym = dyn_cast<Defined>(B))
>  +        if (!Sym->isLocal() || (!Sym->Section || Sym->Section->Live))
>  +          Map[Sym].insert(File);
>  +    }
>  +  }
>  +
>  +  auto Print = [](StringRef A, StringRef B) {
>  +    outs() << left_justify(A, 49) << " " << B << "\n";
>  +  };

This doesn't need to be a lambda.

Cheers,
Rafael


https://reviews.llvm.org/D44336





More information about the llvm-commits mailing list