1//===---- aarch64.cpp - Generic JITLink aarch64 edge kinds, utilities -----===//
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// Generic utilities for graphs representing aarch64 objects.
10//
11//===----------------------------------------------------------------------===//
12
13#include "llvm/ExecutionEngine/JITLink/aarch64.h"
14
15#define DEBUG_TYPE "jitlink"
16
17namespace llvm {
18namespace jitlink {
19namespace aarch64 {
20
21const char NullPointerContent[8] = {0x00, 0x00, 0x00, 0x00,
22                                    0x00, 0x00, 0x00, 0x00};
23
24const char PointerJumpStubContent[12] = {
25    0x10, 0x00, 0x00, (char)0x90u, // ADRP x16, <imm>@page21
26    0x10, 0x02, 0x40, (char)0xf9u, // LDR x16, [x16, <imm>@pageoff12]
27    0x00, 0x02, 0x1f, (char)0xd6u  // BR  x16
28};
29
30const char *getEdgeKindName(Edge::Kind R) {
31  switch (R) {
32  case Pointer64:
33    return "Pointer64";
34  case Pointer32:
35    return "Pointer32";
36  case Delta64:
37    return "Delta64";
38  case Delta32:
39    return "Delta32";
40  case NegDelta64:
41    return "NegDelta64";
42  case NegDelta32:
43    return "NegDelta32";
44  case Branch26PCRel:
45    return "Branch26PCRel";
46  case MoveWide16:
47    return "MoveWide16";
48  case LDRLiteral19:
49    return "LDRLiteral19";
50  case TestAndBranch14PCRel:
51    return "TestAndBranch14PCRel";
52  case CondBranch19PCRel:
53    return "CondBranch19PCRel";
54  case ADRLiteral21:
55    return "ADRLiteral21";
56  case Page21:
57    return "Page21";
58  case PageOffset12:
59    return "PageOffset12";
60  case RequestGOTAndTransformToPage21:
61    return "RequestGOTAndTransformToPage21";
62  case RequestGOTAndTransformToPageOffset12:
63    return "RequestGOTAndTransformToPageOffset12";
64  case RequestGOTAndTransformToDelta32:
65    return "RequestGOTAndTransformToDelta32";
66  case RequestTLVPAndTransformToPage21:
67    return "RequestTLVPAndTransformToPage21";
68  case RequestTLVPAndTransformToPageOffset12:
69    return "RequestTLVPAndTransformToPageOffset12";
70  case RequestTLSDescEntryAndTransformToPage21:
71    return "RequestTLSDescEntryAndTransformToPage21";
72  case RequestTLSDescEntryAndTransformToPageOffset12:
73    return "RequestTLSDescEntryAndTransformToPageOffset12";
74  default:
75    return getGenericEdgeKindName(static_cast<Edge::Kind>(R));
76  }
77}
78
79} // namespace aarch64
80} // namespace jitlink
81} // namespace llvm
82