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(K: static_cast<Edge::Kind>(R));
76 }
77}
78
79} // namespace aarch64
80} // namespace jitlink
81} // namespace llvm
82