Coverage Report

Created: 2026-07-25 06:13

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
166k
MCObjectWriter::~MCObjectWriter() {
18
166k
}
19
20
bool MCObjectWriter::isSymbolRefDifferenceFullyResolved(
21
    const MCAssembler &Asm, const MCSymbolRefExpr *A, const MCSymbolRefExpr *B,
22
    bool InSet, bool &valid) const
23
169k
{
24
169k
  valid = true;
25
  // Modified symbol references cannot be resolved.
26
169k
  if (A->getKind() != MCSymbolRefExpr::VK_None ||
27
169k
      B->getKind() != MCSymbolRefExpr::VK_None)
28
593
    return false;
29
30
169k
  const MCSymbol &SA = A->getSymbol();
31
169k
  const MCSymbol &SB = B->getSymbol();
32
169k
  if (SA.isUndefined() || SB.isUndefined())
33
0
    return false;
34
35
169k
  if (!SA.getFragment() || !SB.getFragment())
36
0
    return false;
37
38
169k
  if (!SA.isInSection()) {
39
945
      valid = false;
40
945
      return false;
41
945
  }
42
168k
  return isSymbolRefDifferenceFullyResolvedImpl(Asm, SA, SB, InSet);
43
169k
}
44
45
bool MCObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(
46
    const MCAssembler &Asm, const MCSymbol &A, const MCSymbol &B,
47
168k
    bool InSet) const {
48
168k
  return isSymbolRefDifferenceFullyResolvedImpl(Asm, A, *B.getFragment(), InSet,
49
168k
                                                false);
50
168k
}
51
52
bool MCObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(
53
    const MCAssembler &Asm, const MCSymbol &SymA, const MCFragment &FB,
54
211k
    bool InSet, bool IsPCRel) const {
55
211k
  const MCSection &SecA = SymA.getSection();
56
211k
  const MCSection &SecB = *FB.getParent();
57
  // On ELF and COFF  A - B is absolute if A and B are in the same section.
58
211k
  return &SecA == &SecB;
59
211k
}
60
61
0
bool MCObjectWriter::isWeak(const MCSymbol &) const { return false; }