aarch64.cpp 2.3 KB

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