Coverage Report

Created: 2017-10-03 07:32

/Users/buildslave/jenkins/sharedspace/clang-stage2-coverage-R@2/llvm/tools/lld/ELF/GdbIndex.cpp
Line
Count
Source
1
//===- GdbIndex.cpp -------------------------------------------------------===//
2
//
3
//                             The LLVM Linker
4
//
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
7
//
8
//===----------------------------------------------------------------------===//
9
//
10
// The -gdb-index option instructs the linker to emit a .gdb_index section.
11
// The section contains information to make gdb startup faster.
12
// The format of the section is described at
13
// https://sourceware.org/gdb/onlinedocs/gdb/Index-Section-Format.html.
14
//
15
//===----------------------------------------------------------------------===//
16
17
#include "GdbIndex.h"
18
#include "Memory.h"
19
#include "llvm/DebugInfo/DWARF/DWARFDebugPubTable.h"
20
#include "llvm/Object/ELFObjectFile.h"
21
22
using namespace llvm;
23
using namespace llvm::object;
24
using namespace lld;
25
using namespace lld::elf;
26
27
130
template <class ELFT> LLDDwarfObj<ELFT>::LLDDwarfObj(ObjFile<ELFT> *Obj) {
28
753
  for (InputSectionBase *Sec : Obj->getSections()) {
29
753
    if (!Sec)
30
517
      continue;
31
236
    
if (LLDDWARFSection *236
M236
= StringSwitch<LLDDWARFSection *>(Sec->Name)
32
236
                                 .Case(".debug_info", &InfoSection)
33
236
                                 .Case(".debug_ranges", &RangeSection)
34
236
                                 .Case(".debug_line", &LineSection)
35
19
                                 .Default(nullptr)) {
36
19
      M->Data = toStringRef(Sec->Data);
37
19
      M->Sec = Sec;
38
19
      continue;
39
19
    }
40
217
    
if (217
Sec->Name == ".debug_abbrev"217
)
41
8
      AbbrevSection = toStringRef(Sec->Data);
42
209
    else 
if (209
Sec->Name == ".debug_gnu_pubnames"209
)
43
2
      GnuPubNamesSection = toStringRef(Sec->Data);
44
207
    else 
if (207
Sec->Name == ".debug_gnu_pubtypes"207
)
45
3
      GnuPubTypesSection = toStringRef(Sec->Data);
46
753
  }
47
130
}
lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)1, false> >::LLDDwarfObj(lld::elf::ObjFile<llvm::object::ELFType<(llvm::support::endianness)1, false> >*)
Line
Count
Source
27
11
template <class ELFT> LLDDwarfObj<ELFT>::LLDDwarfObj(ObjFile<ELFT> *Obj) {
28
62
  for (InputSectionBase *Sec : Obj->getSections()) {
29
62
    if (!Sec)
30
47
      continue;
31
15
    
if (LLDDWARFSection *15
M15
= StringSwitch<LLDDWARFSection *>(Sec->Name)
32
15
                                 .Case(".debug_info", &InfoSection)
33
15
                                 .Case(".debug_ranges", &RangeSection)
34
15
                                 .Case(".debug_line", &LineSection)
35
2
                                 .Default(nullptr)) {
36
2
      M->Data = toStringRef(Sec->Data);
37
2
      M->Sec = Sec;
38
2
      continue;
39
2
    }
40
13
    
if (13
Sec->Name == ".debug_abbrev"13
)
41
0
      AbbrevSection = toStringRef(Sec->Data);
42
13
    else 
if (13
Sec->Name == ".debug_gnu_pubnames"13
)
43
0
      GnuPubNamesSection = toStringRef(Sec->Data);
44
13
    else 
if (13
Sec->Name == ".debug_gnu_pubtypes"13
)
45
0
      GnuPubTypesSection = toStringRef(Sec->Data);
46
62
  }
47
11
}
lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)0, true> >::LLDDwarfObj(lld::elf::ObjFile<llvm::object::ELFType<(llvm::support::endianness)0, true> >*)
Line
Count
Source
27
1
template <class ELFT> LLDDwarfObj<ELFT>::LLDDwarfObj(ObjFile<ELFT> *Obj) {
28
5
  for (InputSectionBase *Sec : Obj->getSections()) {
29
5
    if (!Sec)
30
4
      continue;
31
1
    
if (LLDDWARFSection *1
M1
= StringSwitch<LLDDWARFSection *>(Sec->Name)
32
1
                                 .Case(".debug_info", &InfoSection)
33
1
                                 .Case(".debug_ranges", &RangeSection)
34
1
                                 .Case(".debug_line", &LineSection)
35
0
                                 .Default(nullptr)) {
36
0
      M->Data = toStringRef(Sec->Data);
37
0
      M->Sec = Sec;
38
0
      continue;
39
0
    }
40
1
    
if (1
Sec->Name == ".debug_abbrev"1
)
41
0
      AbbrevSection = toStringRef(Sec->Data);
42
1
    else 
if (1
Sec->Name == ".debug_gnu_pubnames"1
)
43
0
      GnuPubNamesSection = toStringRef(Sec->Data);
44
1
    else 
if (1
Sec->Name == ".debug_gnu_pubtypes"1
)
45
0
      GnuPubTypesSection = toStringRef(Sec->Data);
46
5
  }
47
1
}
lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)1, true> >::LLDDwarfObj(lld::elf::ObjFile<llvm::object::ELFType<(llvm::support::endianness)1, true> >*)
Line
Count
Source
27
117
template <class ELFT> LLDDwarfObj<ELFT>::LLDDwarfObj(ObjFile<ELFT> *Obj) {
28
677
  for (InputSectionBase *Sec : Obj->getSections()) {
29
677
    if (!Sec)
30
462
      continue;
31
215
    
if (LLDDWARFSection *215
M215
= StringSwitch<LLDDWARFSection *>(Sec->Name)
32
215
                                 .Case(".debug_info", &InfoSection)
33
215
                                 .Case(".debug_ranges", &RangeSection)
34
215
                                 .Case(".debug_line", &LineSection)
35
17
                                 .Default(nullptr)) {
36
17
      M->Data = toStringRef(Sec->Data);
37
17
      M->Sec = Sec;
38
17
      continue;
39
17
    }
40
198
    
if (198
Sec->Name == ".debug_abbrev"198
)
41
8
      AbbrevSection = toStringRef(Sec->Data);
42
190
    else 
if (190
Sec->Name == ".debug_gnu_pubnames"190
)
43
2
      GnuPubNamesSection = toStringRef(Sec->Data);
44
188
    else 
if (188
Sec->Name == ".debug_gnu_pubtypes"188
)
45
3
      GnuPubTypesSection = toStringRef(Sec->Data);
46
677
  }
47
117
}
lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)0, false> >::LLDDwarfObj(lld::elf::ObjFile<llvm::object::ELFType<(llvm::support::endianness)0, false> >*)
Line
Count
Source
27
1
template <class ELFT> LLDDwarfObj<ELFT>::LLDDwarfObj(ObjFile<ELFT> *Obj) {
28
9
  for (InputSectionBase *Sec : Obj->getSections()) {
29
9
    if (!Sec)
30
4
      continue;
31
5
    
if (LLDDWARFSection *5
M5
= StringSwitch<LLDDWARFSection *>(Sec->Name)
32
5
                                 .Case(".debug_info", &InfoSection)
33
5
                                 .Case(".debug_ranges", &RangeSection)
34
5
                                 .Case(".debug_line", &LineSection)
35
0
                                 .Default(nullptr)) {
36
0
      M->Data = toStringRef(Sec->Data);
37
0
      M->Sec = Sec;
38
0
      continue;
39
0
    }
40
5
    
if (5
Sec->Name == ".debug_abbrev"5
)
41
0
      AbbrevSection = toStringRef(Sec->Data);
42
5
    else 
if (5
Sec->Name == ".debug_gnu_pubnames"5
)
43
0
      GnuPubNamesSection = toStringRef(Sec->Data);
44
5
    else 
if (5
Sec->Name == ".debug_gnu_pubtypes"5
)
45
0
      GnuPubTypesSection = toStringRef(Sec->Data);
46
9
  }
47
1
}
48
49
// Find if there is a relocation at Pos in Sec.  The code is a bit
50
// more complicated than usual because we need to pass a section index
51
// to llvm since it has no idea about InputSection.
52
template <class ELFT>
53
template <class RelTy>
54
Optional<RelocAddrEntry>
55
LLDDwarfObj<ELFT>::findAux(const InputSectionBase &Sec, uint64_t Pos,
56
46
                           ArrayRef<RelTy> Rels) const {
57
46
  auto It = std::lower_bound(
58
46
      Rels.begin(), Rels.end(), Pos,
59
77
      [](const RelTy &A, uint64_t B) { return A.r_offset < B; });
llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)1, true> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, true>, true> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, true>, true> >) const::'lambda'(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, true>, true> const&, unsigned long long)::operator()(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, true>, true> const&, unsigned long long) const
Line
Count
Source
59
77
      [](const RelTy &A, uint64_t B) { return A.r_offset < B; });
Unexecuted instantiation: llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)0, true> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, true>, false> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, true>, false> >) const::'lambda'(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, true>, false> const&, unsigned long long)::operator()(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, true>, false> const&, unsigned long long) const
Unexecuted instantiation: llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)0, true> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, true>, true> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, true>, true> >) const::'lambda'(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, true>, true> const&, unsigned long long)::operator()(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, true>, true> const&, unsigned long long) const
Unexecuted instantiation: llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)1, true> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, true>, false> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, true>, false> >) const::'lambda'(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, true>, false> const&, unsigned long long)::operator()(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, true>, false> const&, unsigned long long) const
Unexecuted instantiation: llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)1, false> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, false>, true> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, false>, true> >) const::'lambda'(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, false>, true> const&, unsigned long long)::operator()(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, false>, true> const&, unsigned long long) const
Unexecuted instantiation: llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)1, false> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, false>, false> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, false>, false> >) const::'lambda'(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, false>, false> const&, unsigned long long)::operator()(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, false>, false> const&, unsigned long long) const
Unexecuted instantiation: llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)0, false> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, false>, true> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, false>, true> >) const::'lambda'(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, false>, true> const&, unsigned long long)::operator()(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, false>, true> const&, unsigned long long) const
Unexecuted instantiation: llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)0, false> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, false>, false> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, false>, false> >) const::'lambda'(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, false>, false> const&, unsigned long long)::operator()(llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, false>, false> const&, unsigned long long) const
60
46
  if (
It == Rels.end() || 46
It->r_offset != Pos31
)
61
19
    return None;
62
27
  const RelTy &Rel = *It;
63
27
64
27
  const ObjFile<ELFT> *File = Sec.getFile<ELFT>();
65
27
  uint32_t SymIndex = Rel.getSymbol(Config->IsMips64EL);
66
27
  const typename ELFT::Sym &Sym = File->getELFSyms()[SymIndex];
67
27
  uint32_t SecIndex = File->getSectionIndex(Sym);
68
27
  SymbolBody &B = File->getRelocTargetSym(Rel);
69
27
  auto &DR = cast<DefinedRegular>(B);
70
27
  uint64_t Val = DR.Value + getAddend<ELFT>(Rel);
71
27
72
27
  // FIXME: We should be consistent about always adding the file
73
27
  // offset or not.
74
27
  if (DR.Section->Flags & ELF::SHF_ALLOC)
75
24
    Val += cast<InputSection>(DR.Section)->getOffsetInFile();
76
46
77
46
  return RelocAddrEntry{SecIndex, Val};
78
46
}
Unexecuted instantiation: llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)1, false> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, false>, true> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, false>, true> >) const
Unexecuted instantiation: llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)0, true> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, true>, false> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, true>, false> >) const
Unexecuted instantiation: llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)0, true> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, true>, true> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, true>, true> >) const
llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)1, true> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, true>, false> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, true>, false> >) const
Line
Count
Source
56
6
                           ArrayRef<RelTy> Rels) const {
57
6
  auto It = std::lower_bound(
58
6
      Rels.begin(), Rels.end(), Pos,
59
6
      [](const RelTy &A, uint64_t B) { return A.r_offset < B; });
60
6
  if (
It == Rels.end() || 6
It->r_offset != Pos0
)
61
6
    return None;
62
0
  const RelTy &Rel = *It;
63
0
64
0
  const ObjFile<ELFT> *File = Sec.getFile<ELFT>();
65
0
  uint32_t SymIndex = Rel.getSymbol(Config->IsMips64EL);
66
0
  const typename ELFT::Sym &Sym = File->getELFSyms()[SymIndex];
67
0
  uint32_t SecIndex = File->getSectionIndex(Sym);
68
0
  SymbolBody &B = File->getRelocTargetSym(Rel);
69
0
  auto &DR = cast<DefinedRegular>(B);
70
0
  uint64_t Val = DR.Value + getAddend<ELFT>(Rel);
71
0
72
0
  // FIXME: We should be consistent about always adding the file
73
0
  // offset or not.
74
0
  if (DR.Section->Flags & ELF::SHF_ALLOC)
75
0
    Val += cast<InputSection>(DR.Section)->getOffsetInFile();
76
6
77
6
  return RelocAddrEntry{SecIndex, Val};
78
6
}
llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)1, true> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, true>, true> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, true>, true> >) const
Line
Count
Source
56
40
                           ArrayRef<RelTy> Rels) const {
57
40
  auto It = std::lower_bound(
58
40
      Rels.begin(), Rels.end(), Pos,
59
40
      [](const RelTy &A, uint64_t B) { return A.r_offset < B; });
60
40
  if (
It == Rels.end() || 40
It->r_offset != Pos31
)
61
13
    return None;
62
27
  const RelTy &Rel = *It;
63
27
64
27
  const ObjFile<ELFT> *File = Sec.getFile<ELFT>();
65
27
  uint32_t SymIndex = Rel.getSymbol(Config->IsMips64EL);
66
27
  const typename ELFT::Sym &Sym = File->getELFSyms()[SymIndex];
67
27
  uint32_t SecIndex = File->getSectionIndex(Sym);
68
27
  SymbolBody &B = File->getRelocTargetSym(Rel);
69
27
  auto &DR = cast<DefinedRegular>(B);
70
27
  uint64_t Val = DR.Value + getAddend<ELFT>(Rel);
71
27
72
27
  // FIXME: We should be consistent about always adding the file
73
27
  // offset or not.
74
27
  if (DR.Section->Flags & ELF::SHF_ALLOC)
75
24
    Val += cast<InputSection>(DR.Section)->getOffsetInFile();
76
40
77
40
  return RelocAddrEntry{SecIndex, Val};
78
40
}
Unexecuted instantiation: llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)0, false> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, false>, false> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, false>, false> >) const
Unexecuted instantiation: llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)0, false> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, false>, true> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)0, false>, true> >) const
Unexecuted instantiation: llvm::Optional<llvm::RelocAddrEntry> lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)1, false> >::findAux<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, false>, false> >(lld::elf::InputSectionBase const&, unsigned long long, llvm::ArrayRef<llvm::object::Elf_Rel_Impl<llvm::object::ELFType<(llvm::support::endianness)1, false>, false> >) const
79
80
template <class ELFT>
81
Optional<RelocAddrEntry> LLDDwarfObj<ELFT>::find(const llvm::DWARFSection &S,
82
45
                                                 uint64_t Pos) const {
83
45
  auto &Sec = static_cast<const LLDDWARFSection &>(S);
84
45
  if (Sec.Sec->AreRelocsRela)
85
40
    return findAux(*Sec.Sec, Pos, Sec.Sec->template relas<ELFT>());
86
5
  return findAux(*Sec.Sec, Pos, Sec.Sec->template rels<ELFT>());
87
5
}
Unexecuted instantiation: lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)1, false> >::find(llvm::DWARFSection const&, unsigned long long) const
Unexecuted instantiation: lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)0, false> >::find(llvm::DWARFSection const&, unsigned long long) const
lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)1, true> >::find(llvm::DWARFSection const&, unsigned long long) const
Line
Count
Source
82
45
                                                 uint64_t Pos) const {
83
45
  auto &Sec = static_cast<const LLDDWARFSection &>(S);
84
45
  if (Sec.Sec->AreRelocsRela)
85
40
    return findAux(*Sec.Sec, Pos, Sec.Sec->template relas<ELFT>());
86
5
  return findAux(*Sec.Sec, Pos, Sec.Sec->template rels<ELFT>());
87
5
}
Unexecuted instantiation: lld::elf::LLDDwarfObj<llvm::object::ELFType<(llvm::support::endianness)0, true> >::find(llvm::DWARFSection const&, unsigned long long) const
88
89
template class elf::LLDDwarfObj<ELF32LE>;
90
template class elf::LLDDwarfObj<ELF32BE>;
91
template class elf::LLDDwarfObj<ELF64LE>;
92
template class elf::LLDDwarfObj<ELF64BE>;