Coverage Report

Created: 2026-01-14 06:40

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/keystone/llvm/lib/MC/MCObjectWriter.cpp
Line
Count
Source
1
//===- lib/MC/MCObjectWriter.cpp - MCObjectWriter implementation ----------===//
2
//
3
//                     The LLVM Compiler Infrastructure
4
//
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
7
//
8
//===----------------------------------------------------------------------===//
9
10
#include "llvm/MC/MCAssembler.h"
11
#include "llvm/MC/MCExpr.h"
12
#include "llvm/MC/MCObjectWriter.h"
13
#include "llvm/MC/MCSymbol.h"
14
15
using namespace llvm_ks;
16
17
131k
MCObjectWriter::~MCObjectWriter() {
18
131k
}
19
20
bool MCObjectWriter::isSymbolRefDifferenceFullyResolved(
21
    const MCAssembler &Asm, const MCSymbolRefExpr *A, const MCSymbolRefExpr *B,
22
    bool InSet, bool &valid) const
23
144k
{
24
144k
  valid = true;
25
  // Modified symbol references cannot be resolved.
26
144k
  if (A->getKind() != MCSymbolRefExpr::VK_None ||
27
144k
      B->getKind() != MCSymbolRefExpr::VK_None)
28
328
    return false;
29
30
144k
  const MCSymbol &SA = A->getSymbol();
31
144k
  const MCSymbol &SB = B->getSymbol();
32
144k
  if (SA.isUndefined() || SB.isUndefined())
33
0
    return false;
34
35
144k
  if (!SA.getFragment() || !SB.getFragment())
36
0
    return false;
37
38
144k
  if (!SA.isInSection()) {
39
690
      valid = false;
40
690
      return false;
41
690
  }
42
143k
  return isSymbolRefDifferenceFullyResolvedImpl(Asm, SA, SB, InSet);
43
144k
}
44
45
bool MCObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(
46
    const MCAssembler &Asm, const MCSymbol &A, const MCSymbol &B,
47
143k
    bool InSet) const {
48
143k
  return isSymbolRefDifferenceFullyResolvedImpl(Asm, A, *B.getFragment(), InSet,
49
143k
                                                false);
50
143k
}
51
52
bool MCObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(
53
    const MCAssembler &Asm, const MCSymbol &SymA, const MCFragment &FB,
54
169k
    bool InSet, bool IsPCRel) const {
55
169k
  const MCSection &SecA = SymA.getSection();
56
169k
  const MCSection &SecB = *FB.getParent();
57
  // On ELF and COFF  A - B is absolute if A and B are in the same section.
58
169k
  return &SecA == &SecB;
59
169k
}
60
61
0
bool MCObjectWriter::isWeak(const MCSymbol &) const { return false; }