Home | History | Annotate | Line # | Download | only in MC
      1 //===-- llvm/MC/MCFixupKindInfo.h - Fixup Descriptors -----------*- C++ -*-===//
      2 //
      3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4 // See https://llvm.org/LICENSE.txt for license information.
      5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6 //
      7 //===----------------------------------------------------------------------===//
      8 
      9 #ifndef LLVM_MC_MCFIXUPKINDINFO_H
     10 #define LLVM_MC_MCFIXUPKINDINFO_H
     11 
     12 namespace llvm {
     13 
     14 /// Target independent information on a fixup kind.
     15 struct MCFixupKindInfo {
     16   enum FixupKindFlags {
     17     /// Is this fixup kind PCrelative? This is used by the assembler backend to
     18     /// evaluate fixup values in a target independent manner when possible.
     19     FKF_IsPCRel = (1 << 0),
     20 
     21     /// Should this fixup kind force a 4-byte aligned effective PC value?
     22     FKF_IsAlignedDownTo32Bits = (1 << 1),
     23 
     24     /// Should this fixup be evaluated in a target dependent manner?
     25     FKF_IsTarget = (1 << 2),
     26 
     27     /// This fixup kind should be resolved if defined.
     28     /// FIXME This is a workaround because we don't support certain ARM
     29     /// relocation types. This flag should eventually be removed.
     30     FKF_Constant = 1 << 3,
     31   };
     32 
     33   /// A target specific name for the fixup kind. The names will be unique for
     34   /// distinct kinds on any given target.
     35   const char *Name;
     36 
     37   /// The bit offset to write the relocation into.
     38   unsigned TargetOffset;
     39 
     40   /// The number of bits written by this fixup. The bits are assumed to be
     41   /// contiguous.
     42   unsigned TargetSize;
     43 
     44   /// Flags describing additional information on this fixup kind.
     45   unsigned Flags;
     46 };
     47 
     48 } // End llvm namespace
     49 
     50 #endif
     51