[ELF] Initialize Target before it may be dereferenced by findAux when reporting ...
authorFangrui Song <maskray@google.com>
Thu, 9 May 2019 01:45:53 +0000 (01:45 +0000)
committerFangrui Song <maskray@google.com>
Thu, 9 May 2019 01:45:53 +0000 (01:45 +0000)
commitbd086817f646a498d81a8114d269e2fa823a1eb3
tree41db6d3bab9c6e8bd3ac85079709925b8a2cd64f
parent2dda1269abbdb6cdb51123f5bf6d32b5ed86e6b0
[ELF] Initialize Target before it may be dereferenced by findAux when reporting "duplicate symbol" error

    for (InputFile *F : Files)
      Symtab->addFile<ELFT>(F); // if there is a duplicate symbol error

    ...

    Target = getTarget();

When parsing .debug_info in the object file (for better diagnostics),
DWARF.cpp findAux may dereference the null pointer Target

    auto *DR = dyn_cast<Defined>(&File->getRelocTargetSym(Rel));
    if (!DR) {
      // Broken debug info may point to a non-defined symbol,
      // some asan object files may also contain R_X86_64_NONE
      RelType Type = Rel.getType(Config->IsMips64EL);
      if (Type != Target->NoneRel) /// Target is null

Move the assignment of Target to an earlier place to fix this.

Reviewed By: ruiu

Differential Revision: https://reviews.llvm.org/D61712

llvm-svn: 360305
lld/ELF/Driver.cpp
lld/test/ELF/undef-broken-debug.test