Home | History | Annotate | Download | only in Targets
      1 //===-- RuntimeDyldELFMips.h ---- ELF/Mips specific code. -------*- C++ -*-===//
      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 #ifndef LLVM_LIB_EXECUTIONENGINE_RUNTIMEDYLD_TARGETS_RUNTIMEDYLDELFMIPS_H
     11 #define LLVM_LIB_EXECUTIONENGINE_RUNTIMEDYLD_TARGETS_RUNTIMEDYLDELFMIPS_H
     12 
     13 #include "../RuntimeDyldELF.h"
     14 #include <string>
     15 
     16 #define DEBUG_TYPE "dyld"
     17 
     18 namespace llvm {
     19 
     20 class RuntimeDyldELFMips : public RuntimeDyldELF {
     21 public:
     22 
     23   typedef uint64_t TargetPtrT;
     24 
     25   RuntimeDyldELFMips(RuntimeDyld::MemoryManager &MM,
     26                      JITSymbolResolver &Resolver)
     27       : RuntimeDyldELF(MM, Resolver) {}
     28 
     29   void resolveRelocation(const RelocationEntry &RE, uint64_t Value) override;
     30 
     31 protected:
     32   void resolveMIPSO32Relocation(const SectionEntry &Section, uint64_t Offset,
     33                                 uint32_t Value, uint32_t Type, int32_t Addend);
     34   void resolveMIPSN32Relocation(const SectionEntry &Section, uint64_t Offset,
     35                                 uint64_t Value, uint32_t Type, int64_t Addend,
     36                                 uint64_t SymOffset, SID SectionID);
     37   void resolveMIPSN64Relocation(const SectionEntry &Section, uint64_t Offset,
     38                                 uint64_t Value, uint32_t Type, int64_t Addend,
     39                                 uint64_t SymOffset, SID SectionID);
     40 
     41 private:
     42   /// A object file specific relocation resolver
     43   /// \param RE The relocation to be resolved
     44   /// \param Value Target symbol address to apply the relocation action
     45   uint64_t evaluateRelocation(const RelocationEntry &RE, uint64_t Value,
     46                               uint64_t Addend);
     47 
     48   /// A object file specific relocation resolver
     49   /// \param RE The relocation to be resolved
     50   /// \param Value Target symbol address to apply the relocation action
     51   void applyRelocation(const RelocationEntry &RE, uint64_t Value);
     52 
     53   int64_t evaluateMIPS32Relocation(const SectionEntry &Section, uint64_t Offset,
     54                                    uint64_t Value, uint32_t Type);
     55   int64_t evaluateMIPS64Relocation(const SectionEntry &Section,
     56                                    uint64_t Offset, uint64_t Value,
     57                                    uint32_t Type,  int64_t Addend,
     58                                    uint64_t SymOffset, SID SectionID);
     59 
     60   void applyMIPSRelocation(uint8_t *TargetPtr, int64_t CalculatedValue,
     61                            uint32_t Type);
     62 
     63 };
     64 }
     65 
     66 #undef DEBUG_TYPE
     67 
     68 #endif
     69