LLVM  3.7.0
MCAsmBackend.cpp
Go to the documentation of this file.
1 //===-- MCAsmBackend.cpp - Target MC Assembly Backend ----------------------==//
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/MCAsmBackend.h"
11 #include "llvm/ADT/STLExtras.h"
13 using namespace llvm;
14 
15 MCAsmBackend::MCAsmBackend() : HasDataInCodeSupport(false) {}
16 
18 
20  static const MCFixupKindInfo Builtins[] = {
21  {"FK_Data_1", 0, 8, 0},
22  {"FK_Data_2", 0, 16, 0},
23  {"FK_Data_4", 0, 32, 0},
24  {"FK_Data_8", 0, 64, 0},
25  {"FK_PCRel_1", 0, 8, MCFixupKindInfo::FKF_IsPCRel},
26  {"FK_PCRel_2", 0, 16, MCFixupKindInfo::FKF_IsPCRel},
27  {"FK_PCRel_4", 0, 32, MCFixupKindInfo::FKF_IsPCRel},
28  {"FK_PCRel_8", 0, 64, MCFixupKindInfo::FKF_IsPCRel},
29  {"FK_GPRel_1", 0, 8, 0},
30  {"FK_GPRel_2", 0, 16, 0},
31  {"FK_GPRel_4", 0, 32, 0},
32  {"FK_GPRel_8", 0, 64, 0},
33  {"FK_SecRel_1", 0, 8, 0},
34  {"FK_SecRel_2", 0, 16, 0},
35  {"FK_SecRel_4", 0, 32, 0},
36  {"FK_SecRel_8", 0, 64, 0}};
37 
38  assert((size_t)Kind <= array_lengthof(Builtins) && "Unknown fixup kind");
39  return Builtins[Kind];
40 }
41 
43  const MCFixup &Fixup, bool Resolved, uint64_t Value,
44  const MCRelaxableFragment *DF, const MCAsmLayout &Layout) const {
45  if (!Resolved)
46  return true;
47  return fixupNeedsRelaxation(Fixup, Value, DF, Layout);
48 }
virtual bool fixupNeedsRelaxationAdvanced(const MCFixup &Fixup, bool Resolved, uint64_t Value, const MCRelaxableFragment *DF, const MCAsmLayout &Layout) const
Target specific predicate for whether a given fixup requires the associated instruction to be relaxed...
virtual ~MCAsmBackend()
virtual bool fixupNeedsRelaxation(const MCFixup &Fixup, uint64_t Value, const MCRelaxableFragment *DF, const MCAsmLayout &Layout) const =0
Simple predicate for targets where !Resolved implies requiring relaxation.
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...
Definition: MCFixup.h:62
Is this fixup kind PCrelative? This is used by the assembler backend to evaluate fixup values in a ta...
Encapsulates the layout of an assembly file at a particular point in time.
Definition: MCAsmLayout.h:29
#define false
Definition: ConvertUTF.c:65
LLVM_CONSTEXPR size_t array_lengthof(T(&)[N])
Find the length of an array.
Definition: STLExtras.h:247
A relaxable fragment holds on to its MCInst, since it may need to be relaxed during the assembler lay...
Definition: MCAssembler.h:259
MCFixupKind
Extensible enumeration to represent the type of a fixup.
Definition: MCFixup.h:23
PowerPC TLS Dynamic Call Fixup
Target independent information on a fixup kind.
const ARM::ArchExtKind Kind
LLVM Value Representation.
Definition: Value.h:69
virtual const MCFixupKindInfo & getFixupKindInfo(MCFixupKind Kind) const
Get information on a fixup kind.