| //===---- aarch64.cpp - Generic JITLink aarch64 edge kinds, utilities -----===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // Generic utilities for graphs representing aarch64 objects. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "llvm/ExecutionEngine/JITLink/aarch64.h" | |
| #define DEBUG_TYPE "jitlink" | |
| namespace llvm { | |
| namespace jitlink { | |
| namespace aarch64 { | |
| const char NullPointerContent[8] = {0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00}; | |
| const char PointerJumpStubContent[12] = { | |
| 0x10, 0x00, 0x00, (char)0x90u, // ADRP x16, <imm>@page21 | |
| 0x10, 0x02, 0x40, (char)0xf9u, // LDR x16, [x16, <imm>@pageoff12] | |
| 0x00, 0x02, 0x1f, (char)0xd6u // BR x16 | |
| }; | |
| const char *getEdgeKindName(Edge::Kind R) { | |
| switch (R) { | |
| case Pointer64: | |
| return "Pointer64"; | |
| case Pointer32: | |
| return "Pointer32"; | |
| case Delta64: | |
| return "Delta64"; | |
| case Delta32: | |
| return "Delta32"; | |
| case NegDelta64: | |
| return "NegDelta64"; | |
| case NegDelta32: | |
| return "NegDelta32"; | |
| case Branch26PCRel: | |
| return "Branch26PCRel"; | |
| case MoveWide16: | |
| return "MoveWide16"; | |
| case LDRLiteral19: | |
| return "LDRLiteral19"; | |
| case Page21: | |
| return "Page21"; | |
| case PageOffset12: | |
| return "PageOffset12"; | |
| case RequestGOTAndTransformToPage21: | |
| return "RequestGOTAndTransformToPage21"; | |
| case RequestGOTAndTransformToPageOffset12: | |
| return "RequestGOTAndTransformToPageOffset12"; | |
| case RequestGOTAndTransformToDelta32: | |
| return "RequestGOTAndTransformToDelta32"; | |
| case RequestTLVPAndTransformToPage21: | |
| return "RequestTLVPAndTransformToPage21"; | |
| case RequestTLVPAndTransformToPageOffset12: | |
| return "RequestTLVPAndTransformToPageOffset12"; | |
| case RequestTLSDescEntryAndTransformToPage21: | |
| return "RequestTLSDescEntryAndTransformToPage21"; | |
| case RequestTLSDescEntryAndTransformToPageOffset12: | |
| return "RequestTLSDescEntryAndTransformToPageOffset12"; | |
| default: | |
| return getGenericEdgeKindName(static_cast<Edge::Kind>(R)); | |
| } | |
| } | |
| } // namespace aarch64 | |
| } // namespace jitlink | |
| } // namespace llvm |