[llvm] r358869 - [JITLink] Remove a lot of reduntant 'JITLink_' prefixes. NFC.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Sun Apr 21 20:03:10 PDT 2019


Author: lhames
Date: Sun Apr 21 20:03:09 2019
New Revision: 358869

URL: http://llvm.org/viewvc/llvm-project?rev=358869&view=rev
Log:
[JITLink] Remove a lot of reduntant 'JITLink_' prefixes. NFC.

Added:
    llvm/trunk/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h
      - copied, changed from r358865, llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_EHFrameSupport.h
    llvm/trunk/include/llvm/ExecutionEngine/JITLink/MachO.h
      - copied, changed from r358865, llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO.h
    llvm/trunk/include/llvm/ExecutionEngine/JITLink/MachO_x86_64.h
      - copied, changed from r358865, llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h
    llvm/trunk/lib/ExecutionEngine/JITLink/EHFrameSupport.cpp
      - copied, changed from r358865, llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupport.cpp
    llvm/trunk/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h
      - copied, changed from r358865, llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupportImpl.h
    llvm/trunk/lib/ExecutionEngine/JITLink/MachO.cpp
      - copied, changed from r358865, llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO.cpp
    llvm/trunk/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp
      - copied, changed from r358865, llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO_x86_64.cpp
    llvm/trunk/unittests/ExecutionEngine/JITLink/MachO_x86_64_Tests.cpp
      - copied, changed from r358865, llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTest_MachO_x86_64_Tests.cpp
Removed:
    llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_EHFrameSupport.h
    llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO.h
    llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h
    llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupport.cpp
    llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupportImpl.h
    llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO.cpp
    llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO_x86_64.cpp
    llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTest_MachO_x86_64_Tests.cpp
Modified:
    llvm/trunk/lib/ExecutionEngine/JITLink/CMakeLists.txt
    llvm/trunk/lib/ExecutionEngine/JITLink/JITLink.cpp
    llvm/trunk/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp
    llvm/trunk/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
    llvm/trunk/unittests/ExecutionEngine/JITLink/CMakeLists.txt

Copied: llvm/trunk/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h (from r358865, llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_EHFrameSupport.h)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h?p2=llvm/trunk/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h&p1=llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_EHFrameSupport.h&r1=358865&r2=358869&rev=358869&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_EHFrameSupport.h (original)
+++ llvm/trunk/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h Sun Apr 21 20:03:09 2019
@@ -1,4 +1,4 @@
-//===----- JITLink_EHFrameSupport.h - JITLink eh-frame utils ----*- C++ -*-===//
+//===--------- EHFrameSupport.h - JITLink eh-frame utils --------*- C++ -*-===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -10,8 +10,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_EXECUTIONENGINE_JITLINK_JITLINK_EHFRAMESUPPORT_H
-#define LLVM_EXECUTIONENGINE_JITLINK_JITLINK_EHFRAMESUPPORT_H
+#ifndef LLVM_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORT_H
+#define LLVM_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORT_H
 
 #include "llvm/ADT/Triple.h"
 #include "llvm/ExecutionEngine/JITLink/JITLink.h"
@@ -39,4 +39,4 @@ AtomGraphPassFunction createEHFrameRecor
 } // end namespace jitlink
 } // end namespace llvm
 
-#endif // LLVM_EXECUTIONENGINE_JITLINK_JITLINK_EHFRAMESUPPORT_H
+#endif // LLVM_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORT_H

Removed: llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_EHFrameSupport.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_EHFrameSupport.h?rev=358868&view=auto
==============================================================================
--- llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_EHFrameSupport.h (original)
+++ llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_EHFrameSupport.h (removed)
@@ -1,42 +0,0 @@
-//===----- JITLink_EHFrameSupport.h - JITLink eh-frame utils ----*- C++ -*-===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-//
-// EHFrame registration support for JITLink.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_EXECUTIONENGINE_JITLINK_JITLINK_EHFRAMESUPPORT_H
-#define LLVM_EXECUTIONENGINE_JITLINK_JITLINK_EHFRAMESUPPORT_H
-
-#include "llvm/ADT/Triple.h"
-#include "llvm/ExecutionEngine/JITLink/JITLink.h"
-#include "llvm/ExecutionEngine/JITSymbol.h"
-#include "llvm/Support/Error.h"
-
-namespace llvm {
-namespace jitlink {
-
-/// Registers all FDEs in the given eh-frame section with the current process.
-Error registerEHFrameSection(const void *EHFrameSectionAddr);
-
-/// Deregisters all FDEs in the given eh-frame section with the current process.
-Error deregisterEHFrameSection(const void *EHFrameSectionAddr);
-
-/// Creates a pass that records the address of the EH frame section. If no
-/// eh-frame section is found, it will set EHFrameAddr to zero.
-///
-/// Authors of JITLinkContexts can use this function to register a post-fixup
-/// pass that records the address of the eh-frame section. This address can
-/// be used after finalization to register and deregister the frame.
-AtomGraphPassFunction createEHFrameRecorderPass(const Triple &TT,
-                                                JITTargetAddress &EHFrameAddr);
-
-} // end namespace jitlink
-} // end namespace llvm
-
-#endif // LLVM_EXECUTIONENGINE_JITLINK_JITLINK_EHFRAMESUPPORT_H

Removed: llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO.h?rev=358868&view=auto
==============================================================================
--- llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO.h (original)
+++ llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO.h (removed)
@@ -1,30 +0,0 @@
-//===--- JITLink_MachO.h - Generic JIT link function for MachO --*- C++ -*-===//
-//
-// 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 jit-link functions for MachO.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_EXECUTIONENGINE_JITLINK_JITLINK_MACHO_H
-#define LLVM_EXECUTIONENGINE_JITLINK_JITLINK_MACHO_H
-
-#include "llvm/ExecutionEngine/JITLink/JITLink.h"
-
-namespace llvm {
-namespace jitlink {
-
-/// jit-link the given ObjBuffer, which must be a MachO object file.
-///
-/// Uses conservative defaults for GOT and stub handling based on the target
-/// platform.
-void jitLink_MachO(std::unique_ptr<JITLinkContext> Ctx);
-
-} // end namespace jitlink
-} // end namespace llvm
-
-#endif // LLVM_EXECUTIONENGINE_JITLINK_JITLINK_MACHO_X86_64_H

Removed: llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h?rev=358868&view=auto
==============================================================================
--- llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h (original)
+++ llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h (removed)
@@ -1,63 +0,0 @@
-//===--- JITLink_MachO_x86_64.h - JIT link functions for MachO --*- C++ -*-===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-//
-// jit-link functions for MachO/x86-64.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_EXECUTIONENGINE_JITLINK_JITLINK_MACHO_X86_64_H
-#define LLVM_EXECUTIONENGINE_JITLINK_JITLINK_MACHO_X86_64_H
-
-#include "llvm/ExecutionEngine/JITLink/JITLink.h"
-
-namespace llvm {
-namespace jitlink {
-
-namespace MachO_x86_64_Edges {
-
-enum MachOX86RelocationKind : Edge::Kind {
-  Branch32 = Edge::FirstRelocation,
-  Pointer64,
-  Pointer64Anon,
-  PCRel32,
-  PCRel32Minus1,
-  PCRel32Minus2,
-  PCRel32Minus4,
-  PCRel32Anon,
-  PCRel32Minus1Anon,
-  PCRel32Minus2Anon,
-  PCRel32Minus4Anon,
-  PCRel32GOTLoad,
-  PCRel32GOT,
-  PCRel32TLV,
-  Delta32,
-  Delta64,
-  NegDelta32,
-  NegDelta64,
-};
-
-} // namespace MachO_x86_64_Edges
-
-/// jit-link the given object buffer, which must be a MachO x86-64 object file.
-///
-/// If PrePrunePasses is empty then a default mark-live pass will be inserted
-/// that will mark all exported atoms live. If PrePrunePasses is not empty, the
-/// caller is responsible for including a pass to mark atoms as live.
-///
-/// If PostPrunePasses is empty then a default GOT-and-stubs insertion pass will
-/// be inserted. If PostPrunePasses is not empty then the caller is responsible
-/// for including a pass to insert GOT and stub edges.
-void jitLink_MachO_x86_64(std::unique_ptr<JITLinkContext> Ctx);
-
-/// Return the string name of the given MachO x86-64 edge kind.
-StringRef getMachOX86RelocationKindName(Edge::Kind R);
-
-} // end namespace jitlink
-} // end namespace llvm
-
-#endif // LLVM_EXECUTIONENGINE_JITLINK_JITLINK_MACHO_X86_64_H

Copied: llvm/trunk/include/llvm/ExecutionEngine/JITLink/MachO.h (from r358865, llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO.h)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/JITLink/MachO.h?p2=llvm/trunk/include/llvm/ExecutionEngine/JITLink/MachO.h&p1=llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO.h&r1=358865&r2=358869&rev=358869&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO.h (original)
+++ llvm/trunk/include/llvm/ExecutionEngine/JITLink/MachO.h Sun Apr 21 20:03:09 2019
@@ -1,4 +1,4 @@
-//===--- JITLink_MachO.h - Generic JIT link function for MachO --*- C++ -*-===//
+//===------- MachO.h - Generic JIT link function for MachO ------*- C++ -*-===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -10,8 +10,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_EXECUTIONENGINE_JITLINK_JITLINK_MACHO_H
-#define LLVM_EXECUTIONENGINE_JITLINK_JITLINK_MACHO_H
+#ifndef LLVM_EXECUTIONENGINE_JITLINK_MACHO_H
+#define LLVM_EXECUTIONENGINE_JITLINK_MACHO_H
 
 #include "llvm/ExecutionEngine/JITLink/JITLink.h"
 
@@ -27,4 +27,4 @@ void jitLink_MachO(std::unique_ptr<JITLi
 } // end namespace jitlink
 } // end namespace llvm
 
-#endif // LLVM_EXECUTIONENGINE_JITLINK_JITLINK_MACHO_X86_64_H
+#endif // LLVM_EXECUTIONENGINE_JITLINK_MACHO_H

Copied: llvm/trunk/include/llvm/ExecutionEngine/JITLink/MachO_x86_64.h (from r358865, llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/JITLink/MachO_x86_64.h?p2=llvm/trunk/include/llvm/ExecutionEngine/JITLink/MachO_x86_64.h&p1=llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h&r1=358865&r2=358869&rev=358869&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h (original)
+++ llvm/trunk/include/llvm/ExecutionEngine/JITLink/MachO_x86_64.h Sun Apr 21 20:03:09 2019
@@ -1,4 +1,4 @@
-//===--- JITLink_MachO_x86_64.h - JIT link functions for MachO --*- C++ -*-===//
+//===--- MachO_x86_64.h - JIT link functions for MachO/x86-64 ---*- C++ -*-===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -10,8 +10,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_EXECUTIONENGINE_JITLINK_JITLINK_MACHO_X86_64_H
-#define LLVM_EXECUTIONENGINE_JITLINK_JITLINK_MACHO_X86_64_H
+#ifndef LLVM_EXECUTIONENGINE_JITLINK_MACHO_X86_64_H
+#define LLVM_EXECUTIONENGINE_JITLINK_MACHO_X86_64_H
 
 #include "llvm/ExecutionEngine/JITLink/JITLink.h"
 
@@ -60,4 +60,4 @@ StringRef getMachOX86RelocationKindName(
 } // end namespace jitlink
 } // end namespace llvm
 
-#endif // LLVM_EXECUTIONENGINE_JITLINK_JITLINK_MACHO_X86_64_H
+#endif // LLVM_EXECUTIONENGINE_JITLINK_MACHO_X86_64_H

Modified: llvm/trunk/lib/ExecutionEngine/JITLink/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITLink/CMakeLists.txt?rev=358869&r1=358868&r2=358869&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JITLink/CMakeLists.txt (original)
+++ llvm/trunk/lib/ExecutionEngine/JITLink/CMakeLists.txt Sun Apr 21 20:03:09 2019
@@ -1,9 +1,9 @@
 add_llvm_library(LLVMJITLink
   JITLink.cpp
   JITLinkGeneric.cpp
-  JITLink_EHFrameSupport.cpp
-  JITLink_MachO.cpp
-  JITLink_MachO_x86_64.cpp
+  EHFrameSupport.cpp
+  MachO.cpp
+  MachO_x86_64.cpp
   MachOAtomGraphBuilder.cpp
 
   DEPENDS

Copied: llvm/trunk/lib/ExecutionEngine/JITLink/EHFrameSupport.cpp (from r358865, llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupport.cpp)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITLink/EHFrameSupport.cpp?p2=llvm/trunk/lib/ExecutionEngine/JITLink/EHFrameSupport.cpp&p1=llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupport.cpp&r1=358865&r2=358869&rev=358869&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupport.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/JITLink/EHFrameSupport.cpp Sun Apr 21 20:03:09 2019
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "JITLink_EHFrameSupportImpl.h"
+#include "EHFrameSupportImpl.h"
 
 #include "llvm/BinaryFormat/Dwarf.h"
 #include "llvm/Support/DynamicLibrary.h"

Copied: llvm/trunk/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h (from r358865, llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupportImpl.h)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h?p2=llvm/trunk/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h&p1=llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupportImpl.h&r1=358865&r2=358869&rev=358869&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupportImpl.h (original)
+++ llvm/trunk/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h Sun Apr 21 20:03:09 2019
@@ -1,4 +1,4 @@
-//===----- JITLink_EHFrameSupport.h - JITLink eh-frame utils ----*- C++ -*-===//
+//===------- EHFrameSupportImpl.h - JITLink eh-frame utils ------*- C++ -*-===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -10,10 +10,10 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_LIB_EXECUTIONENGINE_JITLINK_JITLINK_EHFRAMESUPPORTIMPL_H
-#define LLVM_LIB_EXECUTIONENGINE_JITLINK_JITLINK_EHFRAMESUPPORTIMPL_H
+#ifndef LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H
+#define LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H
 
-#include "llvm/ExecutionEngine/JITLink/JITLink_EHFrameSupport.h"
+#include "llvm/ExecutionEngine/JITLink/EHFrameSupport.h"
 
 #include "llvm/ExecutionEngine/JITLink/JITLink.h"
 #include "llvm/Support/BinaryStreamReader.h"
@@ -62,4 +62,4 @@ Error addEHFrame(AtomGraph &G, Section &
 } // end namespace jitlink
 } // end namespace llvm
 
-#endif // LLVM_LIB_EXECUTIONENGINE_JITLINK_JITLINK_EHFRAMESUPPORTIMPL_H
+#endif // LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H

Modified: llvm/trunk/lib/ExecutionEngine/JITLink/JITLink.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITLink/JITLink.cpp?rev=358869&r1=358868&r2=358869&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JITLink/JITLink.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/JITLink/JITLink.cpp Sun Apr 21 20:03:09 2019
@@ -10,7 +10,7 @@
 #include "llvm/ExecutionEngine/JITLink/JITLink.h"
 
 #include "llvm/BinaryFormat/Magic.h"
-#include "llvm/ExecutionEngine/JITLink/JITLink_MachO.h"
+#include "llvm/ExecutionEngine/JITLink/MachO.h"
 #include "llvm/Support/Format.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/MemoryBuffer.h"

Modified: llvm/trunk/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp?rev=358869&r1=358868&r2=358869&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp Sun Apr 21 20:03:09 2019
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "JITLinkGeneric.h"
-#include "JITLink_EHFrameSupportImpl.h"
+#include "EHFrameSupportImpl.h"
 
 #include "llvm/Support/BinaryStreamReader.h"
 #include "llvm/Support/MemoryBuffer.h"

Removed: llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupport.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupport.cpp?rev=358868&view=auto
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupport.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupport.cpp (removed)
@@ -1,533 +0,0 @@
-//===-------- JITLink_EHFrameSupport.cpp - JITLink eh-frame utils ---------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "JITLink_EHFrameSupportImpl.h"
-
-#include "llvm/BinaryFormat/Dwarf.h"
-#include "llvm/Support/DynamicLibrary.h"
-
-#define DEBUG_TYPE "jitlink"
-
-namespace llvm {
-namespace jitlink {
-
-EHFrameParser::EHFrameParser(AtomGraph &G, Section &EHFrameSection,
-                             StringRef EHFrameContent,
-                             JITTargetAddress EHFrameAddress,
-                             Edge::Kind FDEToCIERelocKind,
-                             Edge::Kind FDEToTargetRelocKind)
-    : G(G), EHFrameSection(EHFrameSection), EHFrameContent(EHFrameContent),
-      EHFrameAddress(EHFrameAddress),
-      EHFrameReader(EHFrameContent, G.getEndianness()),
-      FDEToCIERelocKind(FDEToCIERelocKind),
-      FDEToTargetRelocKind(FDEToTargetRelocKind) {}
-
-Error EHFrameParser::atomize() {
-  while (!EHFrameReader.empty()) {
-    size_t RecordOffset = EHFrameReader.getOffset();
-
-    LLVM_DEBUG({
-      dbgs() << "Processing eh-frame record at "
-             << format("0x%016" PRIx64, EHFrameAddress + RecordOffset)
-             << " (offset " << RecordOffset << ")\n";
-    });
-
-    size_t CIELength = 0;
-    uint32_t CIELengthField;
-    if (auto Err = EHFrameReader.readInteger(CIELengthField))
-      return Err;
-
-    // Process CIE length/extended-length fields to build the atom.
-    //
-    // The value of these fields describe the length of the *rest* of the CIE
-    // (not including data up to the end of the field itself) so we have to
-    // bump CIELength to include the data up to the end of the field: 4 bytes
-    // for Length, or 12 bytes (4 bytes + 8 bytes) for ExtendedLength.
-    if (CIELengthField == 0) // Length 0 means end of __eh_frame section.
-      break;
-
-    // If the regular length field's value is 0xffffffff, use extended length.
-    if (CIELengthField == 0xffffffff) {
-      uint64_t CIEExtendedLengthField;
-      if (auto Err = EHFrameReader.readInteger(CIEExtendedLengthField))
-        return Err;
-      if (CIEExtendedLengthField > EHFrameReader.bytesRemaining())
-        return make_error<JITLinkError>("CIE record extends past the end of "
-                                        "the __eh_frame section");
-      if (CIEExtendedLengthField + 12 > std::numeric_limits<size_t>::max())
-        return make_error<JITLinkError>("CIE record too large to process");
-      CIELength = CIEExtendedLengthField + 12;
-    } else {
-      if (CIELengthField > EHFrameReader.bytesRemaining())
-        return make_error<JITLinkError>("CIE record extends past the end of "
-                                        "the __eh_frame section");
-      CIELength = CIELengthField + 4;
-    }
-
-    LLVM_DEBUG(dbgs() << "  length: " << CIELength << "\n");
-
-    // Add an atom for this record.
-    CurRecordAtom = &G.addAnonymousAtom(
-        EHFrameSection, EHFrameAddress + RecordOffset, G.getPointerSize());
-    CurRecordAtom->setContent(EHFrameContent.substr(RecordOffset, CIELength));
-
-    // Read the CIE Pointer.
-    size_t CIEPointerAddress = EHFrameAddress + EHFrameReader.getOffset();
-    uint32_t CIEPointer;
-    if (auto Err = EHFrameReader.readInteger(CIEPointer))
-      return Err;
-
-    // Based on the CIE pointer value, parse this as a CIE or FDE record.
-    if (CIEPointer == 0) {
-      if (auto Err = processCIE())
-        return Err;
-    } else {
-      if (auto Err = processFDE(CIEPointerAddress, CIEPointer))
-        return Err;
-    }
-
-    EHFrameReader.setOffset(RecordOffset + CIELength);
-  }
-
-  return Error::success();
-}
-
-Expected<EHFrameParser::AugmentationInfo>
-EHFrameParser::parseAugmentationString() {
-  AugmentationInfo AugInfo;
-  uint8_t NextChar;
-  uint8_t *NextField = &AugInfo.Fields[0];
-
-  if (auto Err = EHFrameReader.readInteger(NextChar))
-    return std::move(Err);
-
-  while (NextChar != 0) {
-    switch (NextChar) {
-    case 'z':
-      AugInfo.AugmentationDataPresent = true;
-      break;
-    case 'e':
-      if (auto Err = EHFrameReader.readInteger(NextChar))
-        return std::move(Err);
-      if (NextChar != 'h')
-        return make_error<JITLinkError>("Unrecognized substring e" +
-                                        Twine(NextChar) +
-                                        " in augmentation string");
-      AugInfo.EHDataFieldPresent = true;
-      break;
-    case 'L':
-    case 'P':
-    case 'R':
-      *NextField++ = NextChar;
-      break;
-    default:
-      return make_error<JITLinkError>("Unrecognized character " +
-                                      Twine(NextChar) +
-                                      " in augmentation string");
-    }
-
-    if (auto Err = EHFrameReader.readInteger(NextChar))
-      return std::move(Err);
-  }
-
-  return std::move(AugInfo);
-}
-
-Expected<JITTargetAddress> EHFrameParser::readAbsolutePointer() {
-  static_assert(sizeof(JITTargetAddress) == sizeof(uint64_t),
-                "Result must be able to hold a uint64_t");
-  JITTargetAddress Addr;
-  if (G.getPointerSize() == 8) {
-    if (auto Err = EHFrameReader.readInteger(Addr))
-      return std::move(Err);
-  } else if (G.getPointerSize() == 4) {
-    uint32_t Addr32;
-    if (auto Err = EHFrameReader.readInteger(Addr32))
-      return std::move(Err);
-    Addr = Addr32;
-  } else
-    llvm_unreachable("Pointer size is not 32-bit or 64-bit");
-  return Addr;
-}
-
-Error EHFrameParser::processCIE() {
-  // Use the dwarf namespace for convenient access to pointer encoding
-  // constants.
-  using namespace dwarf;
-
-  LLVM_DEBUG(dbgs() << "  Record is CIE\n");
-
-  /// Reset state for the new CIE.
-  LSDAFieldPresent = false;
-
-  uint8_t Version = 0;
-  if (auto Err = EHFrameReader.readInteger(Version))
-    return Err;
-
-  if (Version != 0x01)
-    return make_error<JITLinkError>("Bad CIE version " + Twine(Version) +
-                                    " (should be 0x01) in eh-frame");
-
-  auto AugInfo = parseAugmentationString();
-  if (!AugInfo)
-    return AugInfo.takeError();
-
-  // Skip the EH Data field if present.
-  if (AugInfo->EHDataFieldPresent)
-    if (auto Err = EHFrameReader.skip(G.getPointerSize()))
-      return Err;
-
-  // Read and sanity check the code alignment factor.
-  {
-    uint64_t CodeAlignmentFactor = 0;
-    if (auto Err = EHFrameReader.readULEB128(CodeAlignmentFactor))
-      return Err;
-    if (CodeAlignmentFactor != 1)
-      return make_error<JITLinkError>("Unsupported CIE code alignment factor " +
-                                      Twine(CodeAlignmentFactor) +
-                                      " (expected 1)");
-  }
-
-  // Read and sanity check the data alignment factor.
-  {
-    int64_t DataAlignmentFactor = 0;
-    if (auto Err = EHFrameReader.readSLEB128(DataAlignmentFactor))
-      return Err;
-    if (DataAlignmentFactor != -8)
-      return make_error<JITLinkError>("Unsupported CIE data alignment factor " +
-                                      Twine(DataAlignmentFactor) +
-                                      " (expected -8)");
-  }
-
-  // Skip the return address register field.
-  if (auto Err = EHFrameReader.skip(1))
-    return Err;
-
-  uint64_t AugmentationDataLength = 0;
-  if (auto Err = EHFrameReader.readULEB128(AugmentationDataLength))
-    return Err;
-
-  uint32_t AugmentationDataStartOffset = EHFrameReader.getOffset();
-
-  uint8_t *NextField = &AugInfo->Fields[0];
-  while (uint8_t Field = *NextField++) {
-    switch (Field) {
-    case 'L': {
-      LSDAFieldPresent = true;
-      uint8_t LSDAPointerEncoding;
-      if (auto Err = EHFrameReader.readInteger(LSDAPointerEncoding))
-        return Err;
-      if (LSDAPointerEncoding != (DW_EH_PE_pcrel | DW_EH_PE_absptr))
-        return make_error<JITLinkError>(
-            "Unsupported LSDA pointer encoding " +
-            formatv("{0:x2}", LSDAPointerEncoding) + " in CIE at " +
-            formatv("{0:x16}", CurRecordAtom->getAddress()));
-      break;
-    }
-    case 'P': {
-      uint8_t PersonalityPointerEncoding = 0;
-      if (auto Err = EHFrameReader.readInteger(PersonalityPointerEncoding))
-        return Err;
-      if (PersonalityPointerEncoding !=
-          (DW_EH_PE_indirect | DW_EH_PE_pcrel | DW_EH_PE_sdata4))
-        return make_error<JITLinkError>(
-            "Unspported personality pointer "
-            "encoding " +
-            formatv("{0:x2}", PersonalityPointerEncoding) + " in CIE at " +
-            formatv("{0:x16}", CurRecordAtom->getAddress()));
-      uint32_t PersonalityPointerAddress;
-      if (auto Err = EHFrameReader.readInteger(PersonalityPointerAddress))
-        return Err;
-      break;
-    }
-    case 'R': {
-      uint8_t FDEPointerEncoding;
-      if (auto Err = EHFrameReader.readInteger(FDEPointerEncoding))
-        return Err;
-      if (FDEPointerEncoding != (DW_EH_PE_pcrel | DW_EH_PE_absptr))
-        return make_error<JITLinkError>(
-            "Unsupported FDE address pointer "
-            "encoding " +
-            formatv("{0:x2}", FDEPointerEncoding) + " in CIE at " +
-            formatv("{0:x16}", CurRecordAtom->getAddress()));
-      break;
-    }
-    default:
-      llvm_unreachable("Invalid augmentation string field");
-    }
-  }
-
-  if (EHFrameReader.getOffset() - AugmentationDataStartOffset >
-      AugmentationDataLength)
-    return make_error<JITLinkError>("Read past the end of the augmentation "
-                                    "data while parsing fields");
-
-  return Error::success();
-}
-
-Error EHFrameParser::processFDE(JITTargetAddress CIEPointerAddress,
-                                uint32_t CIEPointer) {
-  LLVM_DEBUG(dbgs() << "  Record is FDE\n");
-
-  LLVM_DEBUG({
-    dbgs() << "  CIE pointer: "
-           << format("0x%016" PRIx64, CIEPointerAddress - CIEPointer) << "\n";
-  });
-
-  auto CIEAtom = G.findAtomByAddress(CIEPointerAddress - CIEPointer);
-  if (!CIEAtom)
-    return CIEAtom.takeError();
-
-  // The CIEPointer looks good. Add a relocation.
-  CurRecordAtom->addEdge(FDEToCIERelocKind,
-                         CIEPointerAddress - CurRecordAtom->getAddress(),
-                         *CIEAtom, 0);
-
-  // Read and sanity check the PC-start pointer and size.
-  JITTargetAddress PCBeginAddress = EHFrameAddress + EHFrameReader.getOffset();
-
-  auto PCBeginDelta = readAbsolutePointer();
-  if (!PCBeginDelta)
-    return PCBeginDelta.takeError();
-
-  JITTargetAddress PCBegin = PCBeginAddress + *PCBeginDelta;
-  LLVM_DEBUG({
-    dbgs() << "  PC begin: " << format("0x%016" PRIx64, PCBegin) << "\n";
-  });
-
-  auto *TargetAtom = G.getAtomByAddress(PCBegin);
-
-  if (!TargetAtom)
-    return make_error<JITLinkError>("FDE PC-begin " +
-                                    formatv("{0:x16}", PCBegin) +
-                                    " does not point at atom");
-
-  if (TargetAtom->getAddress() != PCBegin)
-    return make_error<JITLinkError>(
-        "FDE PC-begin " + formatv("{0:x16}", PCBegin) +
-        " does not point to start of atom at " +
-        formatv("{0:x16}", TargetAtom->getAddress()));
-
-  LLVM_DEBUG(dbgs() << "  FDE target: " << *TargetAtom << "\n");
-
-  // The PC-start pointer and size look good. Add relocations.
-  CurRecordAtom->addEdge(FDEToTargetRelocKind,
-                         PCBeginAddress - CurRecordAtom->getAddress(),
-                         *TargetAtom, 0);
-
-  // Add a keep-alive relocation from the function to the FDE to ensure it is
-  // not dead stripped.
-  TargetAtom->addEdge(Edge::KeepAlive, 0, *CurRecordAtom, 0);
-
-  // Skip over the PC range size field.
-  if (auto Err = EHFrameReader.skip(G.getPointerSize()))
-    return Err;
-
-  if (LSDAFieldPresent) {
-    uint64_t AugmentationDataSize;
-    if (auto Err = EHFrameReader.readULEB128(AugmentationDataSize))
-      return Err;
-    if (AugmentationDataSize != G.getPointerSize())
-      return make_error<JITLinkError>("Unexpected FDE augmentation data size "
-                                      "(expected " +
-                                      Twine(G.getPointerSize()) + ", got " +
-                                      Twine(AugmentationDataSize) + ")");
-    JITTargetAddress LSDAAddress = EHFrameAddress + EHFrameReader.getOffset();
-    auto LSDADelta = readAbsolutePointer();
-    if (!LSDADelta)
-      return LSDADelta.takeError();
-
-    JITTargetAddress LSDA = LSDAAddress + *LSDADelta;
-
-    auto *LSDAAtom = G.getAtomByAddress(LSDA);
-
-    if (!LSDAAtom)
-      return make_error<JITLinkError>("FDE LSDA " + formatv("{0:x16}", LSDA) +
-                                      " does not point at atom");
-
-    if (LSDAAtom->getAddress() != LSDA)
-      return make_error<JITLinkError>(
-          "FDE LSDA " + formatv("{0:x16}", LSDA) +
-          " does not point to start of atom at " +
-          formatv("{0:x16}", LSDAAtom->getAddress()));
-
-    LLVM_DEBUG(dbgs() << "  FDE LSDA: " << *LSDAAtom << "\n");
-
-    // LSDA looks good. Add relocations.
-    CurRecordAtom->addEdge(FDEToTargetRelocKind,
-                           LSDAAddress - CurRecordAtom->getAddress(), *LSDAAtom,
-                           0);
-  }
-
-  return Error::success();
-}
-
-Error addEHFrame(AtomGraph &G, Section &EHFrameSection,
-                 StringRef EHFrameContent, JITTargetAddress EHFrameAddress,
-                 Edge::Kind FDEToCIERelocKind,
-                 Edge::Kind FDEToTargetRelocKind) {
-  return EHFrameParser(G, EHFrameSection, EHFrameContent, EHFrameAddress,
-                       FDEToCIERelocKind, FDEToTargetRelocKind)
-      .atomize();
-}
-
-// Determine whether we can register EH tables.
-#if (defined(__GNUC__) && !defined(__ARM_EABI__) && !defined(__ia64__) &&      \
-     !defined(__SEH__) && !defined(__USING_SJLJ_EXCEPTIONS__))
-#define HAVE_EHTABLE_SUPPORT 1
-#else
-#define HAVE_EHTABLE_SUPPORT 0
-#endif
-
-#if HAVE_EHTABLE_SUPPORT
-extern "C" void __register_frame(const void *);
-extern "C" void __deregister_frame(const void *);
-
-Error registerFrameWrapper(const void *P) {
-  __register_frame(P);
-  return Error::success();
-}
-
-Error deregisterFrameWrapper(const void *P) {
-  __deregister_frame(P);
-  return Error::success();
-}
-
-#else
-
-// The building compiler does not have __(de)register_frame but
-// it may be found at runtime in a dynamically-loaded library.
-// For example, this happens when building LLVM with Visual C++
-// but using the MingW runtime.
-static Error registerFrameWrapper(const void *P) {
-  static void((*RegisterFrame)(const void *)) = 0;
-
-  if (!RegisterFrame)
-    *(void **)&RegisterFrame =
-        llvm::sys::DynamicLibrary::SearchForAddressOfSymbol("__register_frame");
-
-  if (RegisterFrame) {
-    RegisterFrame(P);
-    return Error::success();
-  }
-
-  return make_error<JITLinkError>("could not register eh-frame: "
-                                  "__register_frame function not found");
-}
-
-static Error deregisterFrameWrapper(const void *P) {
-  static void((*DeregisterFrame)(const void *)) = 0;
-
-  if (!DeregisterFrame)
-    *(void **)&DeregisterFrame =
-        llvm::sys::DynamicLibrary::SearchForAddressOfSymbol(
-            "__deregister_frame");
-
-  if (DeregisterFrame) {
-    DeregisterFrame(P);
-    return Error::success();
-  }
-
-  return make_error<JITLinkError>("could not deregister eh-frame: "
-                                  "__deregister_frame function not found");
-}
-#endif
-
-#ifdef __APPLE__
-
-template <typename HandleFDEFn>
-Error walkAppleEHFrameSection(const char *const SectionStart,
-                              HandleFDEFn HandleFDE) {
-  const char *CurCFIRecord = SectionStart;
-  uint64_t Size = *reinterpret_cast<const uint32_t *>(CurCFIRecord);
-
-  while (Size != 0) {
-    const char *OffsetField = CurCFIRecord + (Size == 0xffffffff ? 12 : 4);
-    if (Size == 0xffffffff)
-      Size = *reinterpret_cast<const uint64_t *>(CurCFIRecord + 4) + 12;
-    else
-      Size += 4;
-    uint32_t Offset = *reinterpret_cast<const uint32_t *>(OffsetField);
-    if (Offset != 0)
-      if (auto Err = HandleFDE(CurCFIRecord))
-        return Err;
-
-    LLVM_DEBUG({
-      dbgs() << "Registering eh-frame section:\n";
-      dbgs() << "Processing " << (Offset ? "FDE" : "CIE") << " @"
-             << (void *)CurCFIRecord << ": [";
-      for (unsigned I = 0; I < Size; ++I)
-        dbgs() << format(" 0x%02" PRIx8, *(CurCFIRecord + I));
-      dbgs() << " ]\n";
-    });
-    CurCFIRecord += Size;
-
-    Size = *reinterpret_cast<const uint32_t *>(CurCFIRecord);
-  }
-
-  return Error::success();
-}
-
-#endif // __APPLE__
-
-Error registerEHFrameSection(const void *EHFrameSectionAddr) {
-#ifdef __APPLE__
-  // On Darwin __register_frame has to be called for each FDE entry.
-  return walkAppleEHFrameSection(static_cast<const char *>(EHFrameSectionAddr),
-                                 registerFrameWrapper);
-#else
-  // On Linux __register_frame takes a single argument:
-  // a pointer to the start of the .eh_frame section.
-
-  // How can it find the end? Because crtendS.o is linked
-  // in and it has an .eh_frame section with four zero chars.
-  return registerFrameWrapper(EHFrameSectionAddr);
-#endif
-}
-
-Error deregisterEHFrameSection(const void *EHFrameSectionAddr) {
-#ifdef __APPLE__
-  return walkAppleEHFrameSection(static_cast<const char *>(EHFrameSectionAddr),
-                                 deregisterFrameWrapper);
-#else
-  return deregisterFrameWrapper(EHFrameSectionAddr);
-#endif
-}
-
-AtomGraphPassFunction createEHFrameRecorderPass(const Triple &TT,
-                                                JITTargetAddress &EHFrameAddr) {
-  const char *EHFrameSectionName = nullptr;
-  if (TT.getObjectFormat() == Triple::MachO)
-    EHFrameSectionName = "__eh_frame";
-  else
-    EHFrameSectionName = ".eh_frame";
-
-  auto RecordEHFrame = [EHFrameSectionName,
-                        &EHFrameAddr](AtomGraph &G) -> Error {
-    // Search for a non-empty eh-frame and record the address of the first atom
-    // in it.
-    JITTargetAddress Addr = 0;
-    for (auto &S : G.sections())
-      if (S.getName() == EHFrameSectionName && !S.atoms_empty()) {
-        Addr = (*S.atoms().begin())->getAddress();
-        for (auto *DA : S.atoms())
-          if (DA->getAddress() < Addr)
-            Addr = DA->getAddress();
-        break;
-      }
-
-    EHFrameAddr = Addr;
-    return Error::success();
-  };
-
-  return RecordEHFrame;
-}
-
-} // end namespace jitlink
-} // end namespace llvm

Removed: llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupportImpl.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupportImpl.h?rev=358868&view=auto
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupportImpl.h (original)
+++ llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_EHFrameSupportImpl.h (removed)
@@ -1,65 +0,0 @@
-//===----- JITLink_EHFrameSupport.h - JITLink eh-frame utils ----*- C++ -*-===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-//
-// EHFrame registration support for JITLink.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LIB_EXECUTIONENGINE_JITLINK_JITLINK_EHFRAMESUPPORTIMPL_H
-#define LLVM_LIB_EXECUTIONENGINE_JITLINK_JITLINK_EHFRAMESUPPORTIMPL_H
-
-#include "llvm/ExecutionEngine/JITLink/JITLink_EHFrameSupport.h"
-
-#include "llvm/ExecutionEngine/JITLink/JITLink.h"
-#include "llvm/Support/BinaryStreamReader.h"
-
-namespace llvm {
-namespace jitlink {
-
-/// A generic parser for eh-frame sections.
-///
-/// Adds atoms representing CIE and FDE entries, using the given FDE-to-CIE and
-/// FDEToTarget relocation kinds.
-class EHFrameParser {
-public:
-  EHFrameParser(AtomGraph &G, Section &EHFrameSection, StringRef EHFrameContent,
-                JITTargetAddress EHFrameAddress, Edge::Kind FDEToCIERelocKind,
-                Edge::Kind FDEToTargetRelocKind);
-  Error atomize();
-
-private:
-  struct AugmentationInfo {
-    bool AugmentationDataPresent = false;
-    bool EHDataFieldPresent = false;
-    uint8_t Fields[4] = {0x0, 0x0, 0x0, 0x0};
-  };
-
-  Expected<AugmentationInfo> parseAugmentationString();
-  Expected<JITTargetAddress> readAbsolutePointer();
-  Error processCIE();
-  Error processFDE(JITTargetAddress CIEPointerAddress, uint32_t CIEPointer);
-
-  AtomGraph &G;
-  Section &EHFrameSection;
-  StringRef EHFrameContent;
-  JITTargetAddress EHFrameAddress;
-  BinaryStreamReader EHFrameReader;
-  DefinedAtom *CurRecordAtom = nullptr;
-  bool LSDAFieldPresent = false;
-  Edge::Kind FDEToCIERelocKind;
-  Edge::Kind FDEToTargetRelocKind;
-};
-
-Error addEHFrame(AtomGraph &G, Section &EHFrameSection,
-                 StringRef EHFrameContent, JITTargetAddress EHFrameAddress,
-                 Edge::Kind FDEToCIERelocKind, Edge::Kind FDEToTargetRelocKind);
-
-} // end namespace jitlink
-} // end namespace llvm
-
-#endif // LLVM_LIB_EXECUTIONENGINE_JITLINK_JITLINK_EHFRAMESUPPORTIMPL_H

Removed: llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO.cpp?rev=358868&view=auto
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO.cpp (removed)
@@ -1,73 +0,0 @@
-//===------------ JITLink.cpp - Run-time JIT linker for MachO -------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/ExecutionEngine/JITLink/JITLink_MachO.h"
-
-#include "llvm/BinaryFormat/MachO.h"
-#include "llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h"
-#include "llvm/Support/Endian.h"
-#include "llvm/Support/Format.h"
-#include "llvm/Support/MemoryBuffer.h"
-
-using namespace llvm;
-
-#define DEBUG_TYPE "jitlink"
-
-namespace llvm {
-namespace jitlink {
-
-void jitLink_MachO(std::unique_ptr<JITLinkContext> Ctx) {
-
-  // We don't want to do full MachO validation here. Just parse enough of the
-  // header to find out what MachO linker to use.
-
-  StringRef Data = Ctx->getObjectBuffer().getBuffer();
-  if (Data.size() < 4) {
-    Ctx->notifyFailed(make_error<JITLinkError>("Truncated MachO buffer"));
-    return;
-  }
-
-  uint32_t Magic;
-  memcpy(&Magic, Data.data(), sizeof(uint32_t));
-  LLVM_DEBUG({
-    dbgs() << "jitLink_MachO: magic = " << format("0x%08" PRIx32, Magic)
-           << "\n";
-  });
-
-  if (Magic == MachO::MH_MAGIC || Magic == MachO::MH_CIGAM) {
-    Ctx->notifyFailed(
-        make_error<JITLinkError>("MachO 32-bit platforms not supported"));
-    return;
-  } else if (Magic == MachO::MH_MAGIC_64 || Magic == MachO::MH_CIGAM_64) {
-    MachO::mach_header_64 Header;
-
-    memcpy(&Header, Data.data(), sizeof(MachO::mach_header_64));
-    if (Magic == MachO::MH_CIGAM_64)
-      swapStruct(Header);
-
-    LLVM_DEBUG({
-      dbgs() << "jitLink_MachO: cputype = "
-             << format("0x%08" PRIx32, Header.cputype)
-             << ", cpusubtype = " << format("0x%08" PRIx32, Header.cpusubtype)
-             << "\n";
-    });
-
-    switch (Header.cputype) {
-    case MachO::CPU_TYPE_X86_64:
-      return jitLink_MachO_x86_64(std::move(Ctx));
-    }
-    Ctx->notifyFailed(make_error<JITLinkError>("MachO-64 CPU type not valid"));
-    return;
-  }
-
-  Ctx->notifyFailed(make_error<JITLinkError>("MachO magic not valid"));
-}
-
-} // end namespace jitlink
-} // end namespace llvm

Removed: llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO_x86_64.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO_x86_64.cpp?rev=358868&view=auto
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO_x86_64.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO_x86_64.cpp (removed)
@@ -1,605 +0,0 @@
-//===------- JITLink_MachO_x86_64.cpp - JIT linker functionality ----------===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-//
-// MachO jit-link implementation.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h"
-
-#include "BasicGOTAndStubsBuilder.h"
-#include "MachOAtomGraphBuilder.h"
-
-#define DEBUG_TYPE "jitlink"
-
-using namespace llvm;
-using namespace llvm::jitlink;
-using namespace llvm::jitlink::MachO_x86_64_Edges;
-
-namespace {
-
-class MachOAtomGraphBuilder_x86_64 : public MachOAtomGraphBuilder {
-public:
-  MachOAtomGraphBuilder_x86_64(const object::MachOObjectFile &Obj)
-      : MachOAtomGraphBuilder(Obj),
-        NumSymbols(Obj.getSymtabLoadCommand().nsyms) {
-    addCustomAtomizer("__eh_frame", [this](MachOSection &EHFrameSection) {
-      return addEHFrame(getGraph(), EHFrameSection.getGenericSection(),
-                        EHFrameSection.getContent(),
-                        EHFrameSection.getAddress(), NegDelta32, Delta64);
-    });
-  }
-
-private:
-  static Expected<MachOX86RelocationKind>
-  getRelocationKind(const MachO::relocation_info &RI) {
-    switch (RI.r_type) {
-    case MachO::X86_64_RELOC_UNSIGNED:
-      if (!RI.r_pcrel && RI.r_length == 3)
-        return RI.r_extern ? Pointer64 : Pointer64Anon;
-      break;
-    case MachO::X86_64_RELOC_SIGNED:
-      if (RI.r_pcrel && RI.r_length == 2)
-        return RI.r_extern ? PCRel32 : PCRel32Anon;
-      break;
-    case MachO::X86_64_RELOC_BRANCH:
-      if (RI.r_pcrel && RI.r_extern && RI.r_length == 2)
-        return Branch32;
-      break;
-    case MachO::X86_64_RELOC_GOT_LOAD:
-      if (RI.r_pcrel && RI.r_extern && RI.r_length == 2)
-        return PCRel32GOTLoad;
-      break;
-    case MachO::X86_64_RELOC_GOT:
-      if (RI.r_pcrel && RI.r_extern && RI.r_length == 2)
-        return PCRel32GOT;
-      break;
-    case MachO::X86_64_RELOC_SUBTRACTOR:
-      // SUBTRACTOR must be non-pc-rel, extern, with length 2 or 3.
-      // Initially represent SUBTRACTOR relocations with 'Delta<W>'. They may
-      // be turned into NegDelta<W> by parsePairRelocation.
-      if (!RI.r_pcrel && RI.r_extern) {
-        if (RI.r_length == 2)
-          return Delta32;
-        else if (RI.r_length == 3)
-          return Delta64;
-      }
-      break;
-    case MachO::X86_64_RELOC_SIGNED_1:
-      if (RI.r_pcrel && RI.r_length == 2)
-        return RI.r_extern ? PCRel32Minus1 : PCRel32Minus1Anon;
-      break;
-    case MachO::X86_64_RELOC_SIGNED_2:
-      if (RI.r_pcrel && RI.r_length == 2)
-        return RI.r_extern ? PCRel32Minus2 : PCRel32Minus2Anon;
-      break;
-    case MachO::X86_64_RELOC_SIGNED_4:
-      if (RI.r_pcrel && RI.r_length == 2)
-        return RI.r_extern ? PCRel32Minus4 : PCRel32Minus4Anon;
-      break;
-    case MachO::X86_64_RELOC_TLV:
-      if (RI.r_pcrel && RI.r_extern && RI.r_length == 2)
-        return PCRel32TLV;
-      break;
-    }
-
-    return make_error<JITLinkError>(
-        "Unsupported x86-64 relocation: address=" +
-        formatv("{0:x8}", RI.r_address) +
-        ", symbolnum=" + formatv("{0:x6}", RI.r_symbolnum) +
-        ", kind=" + formatv("{0:x1}", RI.r_type) +
-        ", pc_rel=" + (RI.r_pcrel ? "true" : "false") +
-        ", extern= " + (RI.r_extern ? "true" : "false") +
-        ", length=" + formatv("{0:d}", RI.r_length));
-  }
-
-  Expected<Atom &> findAtomBySymbolIndex(const MachO::relocation_info &RI) {
-    auto &Obj = getObject();
-    if (RI.r_symbolnum >= NumSymbols)
-      return make_error<JITLinkError>("Symbol index out of range");
-    auto SymI = Obj.getSymbolByIndex(RI.r_symbolnum);
-    auto Name = SymI->getName();
-    if (!Name)
-      return Name.takeError();
-    return getGraph().getAtomByName(*Name);
-  }
-
-  MachO::relocation_info
-  getRelocationInfo(const object::relocation_iterator RelItr) {
-    MachO::any_relocation_info ARI =
-        getObject().getRelocation(RelItr->getRawDataRefImpl());
-    MachO::relocation_info RI;
-    memcpy(&RI, &ARI, sizeof(MachO::relocation_info));
-    return RI;
-  }
-
-  using PairRelocInfo = std::tuple<MachOX86RelocationKind, Atom *, uint64_t>;
-
-  // Parses paired SUBTRACTOR/UNSIGNED relocations and, on success,
-  // returns the edge kind and addend to be used.
-  Expected<PairRelocInfo>
-  parsePairRelocation(DefinedAtom &AtomToFix, Edge::Kind SubtractorKind,
-                      const MachO::relocation_info &SubRI,
-                      JITTargetAddress FixupAddress, const char *FixupContent,
-                      object::relocation_iterator &UnsignedRelItr,
-                      object::relocation_iterator &RelEnd) {
-    using namespace support;
-
-    assert(((SubtractorKind == Delta32 && SubRI.r_length == 2) ||
-            (SubtractorKind == Delta64 && SubRI.r_length == 3)) &&
-           "Subtractor kind should match length");
-    assert(SubRI.r_extern && "SUBTRACTOR reloc symbol should be extern");
-    assert(!SubRI.r_pcrel && "SUBTRACTOR reloc should not be PCRel");
-
-    if (UnsignedRelItr == RelEnd)
-      return make_error<JITLinkError>("x86_64 SUBTRACTOR without paired "
-                                      "UNSIGNED relocation");
-
-    auto UnsignedRI = getRelocationInfo(UnsignedRelItr);
-
-    if (SubRI.r_address != UnsignedRI.r_address)
-      return make_error<JITLinkError>("x86_64 SUBTRACTOR and paired UNSIGNED "
-                                      "point to different addresses");
-
-    if (SubRI.r_length != UnsignedRI.r_length)
-      return make_error<JITLinkError>("length of x86_64 SUBTRACTOR and paired "
-                                      "UNSIGNED reloc must match");
-
-    auto FromAtom = findAtomBySymbolIndex(SubRI);
-    if (!FromAtom)
-      return FromAtom.takeError();
-
-    // Read the current fixup value.
-    uint64_t FixupValue = 0;
-    if (SubRI.r_length == 3)
-      FixupValue = *(const ulittle64_t *)FixupContent;
-    else
-      FixupValue = *(const ulittle32_t *)FixupContent;
-
-    // Find 'ToAtom' using symbol number or address, depending on whether the
-    // paired UNSIGNED relocation is extern.
-    Atom *ToAtom = nullptr;
-    if (UnsignedRI.r_extern) {
-      // Find target atom by symbol index.
-      if (auto ToAtomOrErr = findAtomBySymbolIndex(UnsignedRI))
-        ToAtom = &*ToAtomOrErr;
-      else
-        return ToAtomOrErr.takeError();
-    } else {
-      if (auto ToAtomOrErr = getGraph().findAtomByAddress(FixupValue))
-        ToAtom = &*ToAtomOrErr;
-      else
-        return ToAtomOrErr.takeError();
-      FixupValue -= ToAtom->getAddress();
-    }
-
-    MachOX86RelocationKind DeltaKind;
-    Atom *TargetAtom;
-    uint64_t Addend;
-    if (&AtomToFix == &*FromAtom) {
-      TargetAtom = ToAtom;
-      DeltaKind = (SubRI.r_length == 3) ? Delta64 : Delta32;
-      Addend = FixupValue + (FixupAddress - FromAtom->getAddress());
-      // FIXME: handle extern 'from'.
-    } else if (&AtomToFix == ToAtom) {
-      TargetAtom = &*FromAtom;
-      DeltaKind = (SubRI.r_length == 3) ? NegDelta64 : NegDelta32;
-      Addend = FixupValue - (FixupAddress - ToAtom->getAddress());
-    } else {
-      // AtomToFix was neither FromAtom nor ToAtom.
-      return make_error<JITLinkError>("SUBTRACTOR relocation must fix up "
-                                      "either 'A' or 'B'");
-    }
-
-    return PairRelocInfo(DeltaKind, TargetAtom, Addend);
-  }
-
-  Error addRelocations() override {
-    using namespace support;
-    auto &G = getGraph();
-    auto &Obj = getObject();
-
-    for (auto &S : Obj.sections()) {
-
-      JITTargetAddress SectionAddress = S.getAddress();
-
-      for (auto RelItr = S.relocation_begin(), RelEnd = S.relocation_end();
-           RelItr != RelEnd; ++RelItr) {
-
-        MachO::relocation_info RI = getRelocationInfo(RelItr);
-
-        // Sanity check the relocation kind.
-        auto Kind = getRelocationKind(RI);
-        if (!Kind)
-          return Kind.takeError();
-
-        // Find the address of the value to fix up.
-        JITTargetAddress FixupAddress = SectionAddress + (uint32_t)RI.r_address;
-
-        LLVM_DEBUG({
-          dbgs() << "Processing relocation at "
-                 << format("0x%016" PRIx64, FixupAddress) << "\n";
-        });
-
-        // Find the atom that the fixup points to.
-        DefinedAtom *AtomToFix = nullptr;
-        {
-          auto AtomToFixOrErr = G.findAtomByAddress(FixupAddress);
-          if (!AtomToFixOrErr)
-            return AtomToFixOrErr.takeError();
-          AtomToFix = &*AtomToFixOrErr;
-        }
-
-        if (FixupAddress + static_cast<JITTargetAddress>(1 << RI.r_length) >
-            AtomToFix->getAddress() + AtomToFix->getContent().size())
-          return make_error<JITLinkError>(
-              "Relocation content extends past end of fixup atom");
-
-        // Get a pointer to the fixup content.
-        const char *FixupContent = AtomToFix->getContent().data() +
-                                   (FixupAddress - AtomToFix->getAddress());
-
-        // The target atom and addend will be populated by the switch below.
-        Atom *TargetAtom = nullptr;
-        uint64_t Addend = 0;
-
-        switch (*Kind) {
-        case Branch32:
-        case PCRel32:
-        case PCRel32GOTLoad:
-        case PCRel32GOT:
-          if (auto TargetAtomOrErr = findAtomBySymbolIndex(RI))
-            TargetAtom = &*TargetAtomOrErr;
-          else
-            return TargetAtomOrErr.takeError();
-          Addend = *(const ulittle32_t *)FixupContent;
-          break;
-        case Pointer64:
-          if (auto TargetAtomOrErr = findAtomBySymbolIndex(RI))
-            TargetAtom = &*TargetAtomOrErr;
-          else
-            return TargetAtomOrErr.takeError();
-          Addend = *(const ulittle64_t *)FixupContent;
-          break;
-        case Pointer64Anon: {
-          JITTargetAddress TargetAddress = *(const ulittle64_t *)FixupContent;
-          if (auto TargetAtomOrErr = G.findAtomByAddress(TargetAddress))
-            TargetAtom = &*TargetAtomOrErr;
-          else
-            return TargetAtomOrErr.takeError();
-          Addend = TargetAddress - TargetAtom->getAddress();
-          break;
-        }
-        case PCRel32Minus1:
-        case PCRel32Minus2:
-        case PCRel32Minus4:
-          if (auto TargetAtomOrErr = findAtomBySymbolIndex(RI))
-            TargetAtom = &*TargetAtomOrErr;
-          else
-            return TargetAtomOrErr.takeError();
-          Addend = *(const ulittle32_t *)FixupContent +
-                   (1 << (*Kind - PCRel32Minus1));
-          break;
-        case PCRel32Anon: {
-          JITTargetAddress TargetAddress =
-              FixupAddress + 4 + *(const ulittle32_t *)FixupContent;
-          if (auto TargetAtomOrErr = G.findAtomByAddress(TargetAddress))
-            TargetAtom = &*TargetAtomOrErr;
-          else
-            return TargetAtomOrErr.takeError();
-          Addend = TargetAddress - TargetAtom->getAddress();
-          break;
-        }
-        case PCRel32Minus1Anon:
-        case PCRel32Minus2Anon:
-        case PCRel32Minus4Anon: {
-          JITTargetAddress Delta =
-              static_cast<JITTargetAddress>(1 << (*Kind - PCRel32Minus1Anon));
-          JITTargetAddress TargetAddress =
-              FixupAddress + 4 + Delta + *(const ulittle32_t *)FixupContent;
-          if (auto TargetAtomOrErr = G.findAtomByAddress(TargetAddress))
-            TargetAtom = &*TargetAtomOrErr;
-          else
-            return TargetAtomOrErr.takeError();
-          Addend = TargetAddress - TargetAtom->getAddress();
-          break;
-        }
-        case Delta32:
-        case Delta64: {
-          // We use Delta32/Delta64 to represent SUBTRACTOR relocations.
-          // parsePairRelocation handles the paired reloc, and returns the
-          // edge kind to be used (either Delta32/Delta64, or
-          // NegDelta32/NegDelta64, depending on the direction of the
-          // subtraction) along with the addend.
-          auto PairInfo =
-              parsePairRelocation(*AtomToFix, *Kind, RI, FixupAddress,
-                                  FixupContent, ++RelItr, RelEnd);
-          if (!PairInfo)
-            return PairInfo.takeError();
-          std::tie(*Kind, TargetAtom, Addend) = *PairInfo;
-          assert(TargetAtom && "No target atom from parsePairRelocation?");
-          break;
-        }
-        default:
-          llvm_unreachable("Special relocation kind should not appear in "
-                           "mach-o file");
-        }
-
-        LLVM_DEBUG({
-          Edge GE(*Kind, FixupAddress - AtomToFix->getAddress(), *TargetAtom,
-                  Addend);
-          printEdge(dbgs(), *AtomToFix, GE,
-                    getMachOX86RelocationKindName(*Kind));
-          dbgs() << "\n";
-        });
-        AtomToFix->addEdge(*Kind, FixupAddress - AtomToFix->getAddress(),
-                           *TargetAtom, Addend);
-      }
-    }
-    return Error::success();
-  }
-
-  unsigned NumSymbols = 0;
-};
-
-class MachO_x86_64_GOTAndStubsBuilder
-    : public BasicGOTAndStubsBuilder<MachO_x86_64_GOTAndStubsBuilder> {
-public:
-  MachO_x86_64_GOTAndStubsBuilder(AtomGraph &G)
-      : BasicGOTAndStubsBuilder<MachO_x86_64_GOTAndStubsBuilder>(G) {}
-
-  bool isGOTEdge(Edge &E) const {
-    return E.getKind() == PCRel32GOT || E.getKind() == PCRel32GOTLoad;
-  }
-
-  DefinedAtom &createGOTEntry(Atom &Target) {
-    auto &GOTEntryAtom = G.addAnonymousAtom(getGOTSection(), 0x0, 8);
-    GOTEntryAtom.setContent(
-        StringRef(reinterpret_cast<const char *>(NullGOTEntryContent), 8));
-    GOTEntryAtom.addEdge(Pointer64, 0, Target, 0);
-    return GOTEntryAtom;
-  }
-
-  void fixGOTEdge(Edge &E, Atom &GOTEntry) {
-    assert((E.getKind() == PCRel32GOT || E.getKind() == PCRel32GOTLoad) &&
-           "Not a GOT edge?");
-    E.setKind(PCRel32);
-    E.setTarget(GOTEntry);
-    // Leave the edge addend as-is.
-  }
-
-  bool isExternalBranchEdge(Edge &E) {
-    return E.getKind() == Branch32 && !E.getTarget().isDefined();
-  }
-
-  DefinedAtom &createStub(Atom &Target) {
-    auto &StubAtom = G.addAnonymousAtom(getStubsSection(), 0x0, 2);
-    StubAtom.setContent(
-        StringRef(reinterpret_cast<const char *>(StubContent), 6));
-
-    // Re-use GOT entries for stub targets.
-    auto &GOTEntryAtom = getGOTEntryAtom(Target);
-    StubAtom.addEdge(PCRel32, 2, GOTEntryAtom, 0);
-
-    return StubAtom;
-  }
-
-  void fixExternalBranchEdge(Edge &E, Atom &Stub) {
-    assert(E.getKind() == Branch32 && "Not a Branch32 edge?");
-    assert(E.getAddend() == 0 && "Branch32 edge has non-zero addend?");
-    E.setTarget(Stub);
-  }
-
-private:
-  Section &getGOTSection() {
-    if (!GOTSection)
-      GOTSection = &G.createSection("$__GOT", sys::Memory::MF_READ, false);
-    return *GOTSection;
-  }
-
-  Section &getStubsSection() {
-    if (!StubsSection) {
-      auto StubsProt = static_cast<sys::Memory::ProtectionFlags>(
-          sys::Memory::MF_READ | sys::Memory::MF_EXEC);
-      StubsSection = &G.createSection("$__STUBS", StubsProt, false);
-    }
-    return *StubsSection;
-  }
-
-  static const uint8_t NullGOTEntryContent[8];
-  static const uint8_t StubContent[6];
-  Section *GOTSection = nullptr;
-  Section *StubsSection = nullptr;
-};
-
-const uint8_t MachO_x86_64_GOTAndStubsBuilder::NullGOTEntryContent[8] = {
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-const uint8_t MachO_x86_64_GOTAndStubsBuilder::StubContent[6] = {
-    0xFF, 0x25, 0x00, 0x00, 0x00, 0x00};
-} // namespace
-
-namespace llvm {
-namespace jitlink {
-
-class MachOJITLinker_x86_64 : public JITLinker<MachOJITLinker_x86_64> {
-  friend class JITLinker<MachOJITLinker_x86_64>;
-
-public:
-  MachOJITLinker_x86_64(std::unique_ptr<JITLinkContext> Ctx,
-                        PassConfiguration PassConfig)
-      : JITLinker(std::move(Ctx), std::move(PassConfig)) {}
-
-private:
-  StringRef getEdgeKindName(Edge::Kind R) const override {
-    return getMachOX86RelocationKindName(R);
-  }
-
-  Expected<std::unique_ptr<AtomGraph>>
-  buildGraph(MemoryBufferRef ObjBuffer) override {
-    auto MachOObj = object::ObjectFile::createMachOObjectFile(ObjBuffer);
-    if (!MachOObj)
-      return MachOObj.takeError();
-    return MachOAtomGraphBuilder_x86_64(**MachOObj).buildGraph();
-  }
-
-  static Error targetOutOfRangeError(const Edge &E) {
-    std::string ErrMsg;
-    {
-      raw_string_ostream ErrStream(ErrMsg);
-      ErrStream << "Target \"" << E.getTarget() << "\" out of range";
-    }
-    return make_error<JITLinkError>(std::move(ErrMsg));
-  }
-
-  Error applyFixup(DefinedAtom &A, const Edge &E, char *AtomWorkingMem) const {
-    using namespace support;
-
-    char *FixupPtr = AtomWorkingMem + E.getOffset();
-    JITTargetAddress FixupAddress = A.getAddress() + E.getOffset();
-
-    switch (E.getKind()) {
-    case Branch32:
-    case PCRel32:
-    case PCRel32Anon: {
-      int64_t Value =
-          E.getTarget().getAddress() - (FixupAddress + 4) + E.getAddend();
-      if (Value < std::numeric_limits<int32_t>::min() ||
-          Value > std::numeric_limits<int32_t>::max())
-        return targetOutOfRangeError(E);
-      *(little32_t *)FixupPtr = Value;
-      break;
-    }
-    case Pointer64:
-    case Pointer64Anon: {
-      uint64_t Value = E.getTarget().getAddress() + E.getAddend();
-      *(ulittle64_t *)FixupPtr = Value;
-      break;
-    }
-    case PCRel32Minus1:
-    case PCRel32Minus2:
-    case PCRel32Minus4: {
-      int Delta = 4 + (1 << (E.getKind() - PCRel32Minus1));
-      int64_t Value =
-          E.getTarget().getAddress() - (FixupAddress + Delta) + E.getAddend();
-      if (Value < std::numeric_limits<int32_t>::min() ||
-          Value > std::numeric_limits<int32_t>::max())
-        return targetOutOfRangeError(E);
-      *(little32_t *)FixupPtr = Value;
-      break;
-    }
-    case PCRel32Minus1Anon:
-    case PCRel32Minus2Anon:
-    case PCRel32Minus4Anon: {
-      int Delta = 4 + (1 << (E.getKind() - PCRel32Minus1Anon));
-      int64_t Value =
-          E.getTarget().getAddress() - (FixupAddress + Delta) + E.getAddend();
-      if (Value < std::numeric_limits<int32_t>::min() ||
-          Value > std::numeric_limits<int32_t>::max())
-        return targetOutOfRangeError(E);
-      *(little32_t *)FixupPtr = Value;
-      break;
-    }
-    case Delta32:
-    case Delta64:
-    case NegDelta32:
-    case NegDelta64: {
-      int64_t Value;
-      if (E.getKind() == Delta32 || E.getKind() == Delta64)
-        Value = E.getTarget().getAddress() - FixupAddress + E.getAddend();
-      else
-        Value = FixupAddress - E.getTarget().getAddress() + E.getAddend();
-
-      if (E.getKind() == Delta32 || E.getKind() == NegDelta32) {
-        if (Value < std::numeric_limits<int32_t>::min() ||
-            Value > std::numeric_limits<int32_t>::max())
-          return targetOutOfRangeError(E);
-        *(little32_t *)FixupPtr = Value;
-      } else
-        *(little64_t *)FixupPtr = Value;
-      break;
-    }
-    default:
-      llvm_unreachable("Unrecognized edge kind");
-    }
-
-    return Error::success();
-  }
-
-  uint64_t NullValue = 0;
-};
-
-void jitLink_MachO_x86_64(std::unique_ptr<JITLinkContext> Ctx) {
-  PassConfiguration Config;
-  Triple TT("x86_64-apple-macosx");
-
-  if (Ctx->shouldAddDefaultTargetPasses(TT)) {
-    // Add a mark-live pass.
-    if (auto MarkLive = Ctx->getMarkLivePass(TT))
-      Config.PrePrunePasses.push_back(std::move(MarkLive));
-    else
-      Config.PrePrunePasses.push_back(markAllAtomsLive);
-
-    // Add an in-place GOT/Stubs pass.
-    Config.PostPrunePasses.push_back([](AtomGraph &G) -> Error {
-      MachO_x86_64_GOTAndStubsBuilder(G).run();
-      return Error::success();
-    });
-  }
-
-  if (auto Err = Ctx->modifyPassConfig(TT, Config))
-    return Ctx->notifyFailed(std::move(Err));
-
-  // Construct a JITLinker and run the link function.
-  MachOJITLinker_x86_64::link(std::move(Ctx), std::move(Config));
-}
-
-StringRef getMachOX86RelocationKindName(Edge::Kind R) {
-  switch (R) {
-  case Branch32:
-    return "Branch32";
-  case Pointer64:
-    return "Pointer64";
-  case Pointer64Anon:
-    return "Pointer64Anon";
-  case PCRel32:
-    return "PCRel32";
-  case PCRel32Minus1:
-    return "PCRel32Minus1";
-  case PCRel32Minus2:
-    return "PCRel32Minus2";
-  case PCRel32Minus4:
-    return "PCRel32Minus4";
-  case PCRel32Anon:
-    return "PCRel32Anon";
-  case PCRel32Minus1Anon:
-    return "PCRel32Minus1Anon";
-  case PCRel32Minus2Anon:
-    return "PCRel32Minus2Anon";
-  case PCRel32Minus4Anon:
-    return "PCRel32Minus4Anon";
-  case PCRel32GOTLoad:
-    return "PCRel32GOTLoad";
-  case PCRel32GOT:
-    return "PCRel32GOT";
-  case PCRel32TLV:
-    return "PCRel32TLV";
-  case Delta32:
-    return "Delta32";
-  case Delta64:
-    return "Delta64";
-  case NegDelta32:
-    return "NegDelta32";
-  case NegDelta64:
-    return "NegDelta64";
-  default:
-    return getGenericEdgeKindName(static_cast<Edge::Kind>(R));
-  }
-}
-
-} // end namespace jitlink
-} // end namespace llvm

Copied: llvm/trunk/lib/ExecutionEngine/JITLink/MachO.cpp (from r358865, llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO.cpp)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITLink/MachO.cpp?p2=llvm/trunk/lib/ExecutionEngine/JITLink/MachO.cpp&p1=llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO.cpp&r1=358865&r2=358869&rev=358869&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/JITLink/MachO.cpp Sun Apr 21 20:03:09 2019
@@ -1,4 +1,4 @@
-//===------------ JITLink.cpp - Run-time JIT linker for MachO -------------===//
+//===-------------- MachO.cpp - JIT linker function for MachO -------------===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -6,11 +6,15 @@
 // License. See LICENSE.TXT for details.
 //
 //===----------------------------------------------------------------------===//
+//
+// MachO jit-link function.
+//
+//===----------------------------------------------------------------------===//
 
-#include "llvm/ExecutionEngine/JITLink/JITLink_MachO.h"
+#include "llvm/ExecutionEngine/JITLink/MachO.h"
 
 #include "llvm/BinaryFormat/MachO.h"
-#include "llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h"
+#include "llvm/ExecutionEngine/JITLink/MachO_x86_64.h"
 #include "llvm/Support/Endian.h"
 #include "llvm/Support/Format.h"
 #include "llvm/Support/MemoryBuffer.h"

Copied: llvm/trunk/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp (from r358865, llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO_x86_64.cpp)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp?p2=llvm/trunk/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp&p1=llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO_x86_64.cpp&r1=358865&r2=358869&rev=358869&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JITLink/JITLink_MachO_x86_64.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp Sun Apr 21 20:03:09 2019
@@ -1,4 +1,4 @@
-//===------- JITLink_MachO_x86_64.cpp - JIT linker functionality ----------===//
+//===---- MachO_x86_64.cpp -JIT linker implementation for MachO/x86-64 ----===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -6,11 +6,11 @@
 //
 //===----------------------------------------------------------------------===//
 //
-// MachO jit-link implementation.
+// MachO/x86-64 jit-link implementation.
 //
 //===----------------------------------------------------------------------===//
 
-#include "llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h"
+#include "llvm/ExecutionEngine/JITLink/MachO_x86_64.h"
 
 #include "BasicGOTAndStubsBuilder.h"
 #include "MachOAtomGraphBuilder.h"

Modified: llvm/trunk/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp?rev=358869&r1=358868&r2=358869&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp Sun Apr 21 20:03:09 2019
@@ -9,7 +9,7 @@
 #include "llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h"
 
 #include "llvm/ADT/Optional.h"
-#include "llvm/ExecutionEngine/JITLink/JITLink_EHFrameSupport.h"
+#include "llvm/ExecutionEngine/JITLink/EHFrameSupport.h"
 
 #include <vector>
 

Modified: llvm/trunk/unittests/ExecutionEngine/JITLink/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ExecutionEngine/JITLink/CMakeLists.txt?rev=358869&r1=358868&r2=358869&view=diff
==============================================================================
--- llvm/trunk/unittests/ExecutionEngine/JITLink/CMakeLists.txt (original)
+++ llvm/trunk/unittests/ExecutionEngine/JITLink/CMakeLists.txt Sun Apr 21 20:03:09 2019
@@ -12,7 +12,7 @@ set(LLVM_LINK_COMPONENTS
 
 add_llvm_unittest(JITLinkTests
     JITLinkTestCommon.cpp
-    JITLinkTest_MachO_x86_64_Tests.cpp
+    MachO_x86_64_Tests.cpp
   )
 
 target_link_libraries(JITLinkTests PRIVATE LLVMTestingSupport)

Removed: llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTest_MachO_x86_64_Tests.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTest_MachO_x86_64_Tests.cpp?rev=358868&view=auto
==============================================================================
--- llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTest_MachO_x86_64_Tests.cpp (original)
+++ llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTest_MachO_x86_64_Tests.cpp (removed)
@@ -1,229 +0,0 @@
-//===---- JITLinkTest_MachO_x86_64.cpp - Tests for JITLink MachO/x86-64 ---===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-#include "JITLinkTestCommon.h"
-
-#include "llvm/ADT/DenseSet.h"
-#include "llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h"
-#include "llvm/Testing/Support/Error.h"
-
-#include "gtest/gtest.h"
-
-using namespace llvm;
-using namespace llvm::jitlink;
-using namespace llvm::jitlink::MachO_x86_64_Edges;
-
-namespace {
-
-class JITLinkTest_MachO_x86_64 : public JITLinkTestCommon,
-                                 public testing::Test {
-public:
-  using BasicVerifyGraphFunction =
-      std::function<void(AtomGraph &, const MCDisassembler &)>;
-
-  void runBasicVerifyGraphTest(StringRef AsmSrc, StringRef Triple,
-                               StringMap<JITEvaluatedSymbol> Externals,
-                               bool PIC, bool LargeCodeModel,
-                               MCTargetOptions Options,
-                               BasicVerifyGraphFunction RunGraphTest) {
-    auto TR = getTestResources(AsmSrc, Triple, PIC, LargeCodeModel,
-                               std::move(Options));
-    if (!TR) {
-      dbgs() << "Skipping JITLInk unit test: " << toString(TR.takeError())
-             << "\n";
-      return;
-    }
-
-    auto JTCtx = llvm::make_unique<TestJITLinkContext>(
-        **TR, [&](AtomGraph &G) { RunGraphTest(G, (*TR)->getDisassembler()); });
-
-    JTCtx->externals() = std::move(Externals);
-
-    jitLink_MachO_x86_64(std::move(JTCtx));
-  }
-
-protected:
-  static void verifyIsPointerTo(AtomGraph &G, DefinedAtom &A, Atom &Target) {
-    EXPECT_EQ(A.edges_size(), 1U) << "Incorrect number of edges for pointer";
-    if (A.edges_size() != 1U)
-      return;
-    auto &E = *A.edges().begin();
-    EXPECT_EQ(E.getKind(), Pointer64)
-        << "Expected pointer to have a pointer64 relocation";
-    EXPECT_EQ(&E.getTarget(), &Target) << "Expected edge to point at target";
-    EXPECT_THAT_EXPECTED(readInt<uint64_t>(G, A), HasValue(Target.getAddress()))
-        << "Pointer does not point to target";
-  }
-
-  static void verifyGOTLoad(AtomGraph &G, DefinedAtom &A, Edge &E,
-                            Atom &Target) {
-    EXPECT_EQ(E.getAddend(), 0U) << "Expected GOT load to have a zero addend";
-    EXPECT_TRUE(E.getTarget().isDefined())
-        << "GOT entry should be a defined atom";
-    if (!E.getTarget().isDefined())
-      return;
-
-    verifyIsPointerTo(G, static_cast<DefinedAtom &>(E.getTarget()), Target);
-  }
-
-  static void verifyCall(const MCDisassembler &Dis, AtomGraph &G,
-                         DefinedAtom &Caller, Edge &E, Atom &Callee) {
-    EXPECT_EQ(E.getKind(), Branch32) << "Edge is not a Branch32";
-    EXPECT_EQ(E.getAddend(), 0U) << "Expected no addend on stub call";
-    EXPECT_EQ(&E.getTarget(), &Callee)
-        << "Edge does not point at expected callee";
-
-    JITTargetAddress FixupAddress = Caller.getAddress() + E.getOffset();
-    uint64_t PCRelDelta = Callee.getAddress() - (FixupAddress + 4);
-
-    EXPECT_THAT_EXPECTED(
-        decodeImmediateOperand(Dis, Caller, 0, E.getOffset() - 1),
-        HasValue(PCRelDelta));
-  }
-
-  static void verifyIndirectCall(const MCDisassembler &Dis, AtomGraph &G,
-                                 DefinedAtom &Caller, Edge &E, Atom &Callee) {
-    EXPECT_EQ(E.getKind(), PCRel32) << "Edge is not a PCRel32";
-    EXPECT_EQ(E.getAddend(), 0) << "Expected no addend on stub cal";
-    EXPECT_TRUE(E.getTarget().isDefined()) << "Target is not a defined atom";
-    if (!E.getTarget().isDefined())
-      return;
-    verifyIsPointerTo(G, static_cast<DefinedAtom &>(E.getTarget()), Callee);
-
-    JITTargetAddress FixupAddress = Caller.getAddress() + E.getOffset();
-    uint64_t PCRelDelta = E.getTarget().getAddress() - (FixupAddress + 4);
-
-    EXPECT_THAT_EXPECTED(
-        decodeImmediateOperand(Dis, Caller, 3, E.getOffset() - 2),
-        HasValue(PCRelDelta));
-  }
-
-  static void verifyCallViaStub(const MCDisassembler &Dis, AtomGraph &G,
-                                DefinedAtom &Caller, Edge &E, Atom &Callee) {
-    verifyCall(Dis, G, Caller, E, E.getTarget());
-
-    if (!E.getTarget().isDefined()) {
-      ADD_FAILURE() << "Edge target is not a stub";
-      return;
-    }
-
-    auto &StubAtom = static_cast<DefinedAtom &>(E.getTarget());
-    EXPECT_EQ(StubAtom.edges_size(), 1U)
-        << "Expected one edge from stub to target";
-
-    auto &StubEdge = *StubAtom.edges().begin();
-
-    verifyIndirectCall(Dis, G, static_cast<DefinedAtom &>(StubAtom), StubEdge,
-                       Callee);
-  }
-};
-
-} // end anonymous namespace
-
-// Test each operation on LegacyObjectTransformLayer.
-TEST_F(JITLinkTest_MachO_x86_64, BasicRelocations) {
-  runBasicVerifyGraphTest(
-      R"(
-            .section        __TEXT,__text,regular,pure_instructions
-            .build_version macos, 10, 14
-            .globl  _bar
-            .p2align        4, 0x90
-    _bar:
-            callq    _baz
-
-            .globl  _foo
-            .p2align        4, 0x90
-    _foo:
-            callq   _bar
-    _foo.1:
-            movq    _y at GOTPCREL(%rip), %rcx
-    _foo.2:
-            movq    _p(%rip), %rdx
-
-            .section        __DATA,__data
-            .globl  _x
-            .p2align        2
-    _x:
-            .long   42
-
-            .globl  _p
-            .p2align        3
-    _p:
-            .quad   _x
-
-    .subsections_via_symbols)",
-      "x86_64-apple-macosx10.14",
-      {{"_y", JITEvaluatedSymbol(0xdeadbeef, JITSymbolFlags::Exported)},
-       {"_baz", JITEvaluatedSymbol(0xcafef00d, JITSymbolFlags::Exported)}},
-      true, false, MCTargetOptions(),
-      [](AtomGraph &G, const MCDisassembler &Dis) {
-        // Name the atoms in the asm above.
-        auto &Baz = atom(G, "_baz");
-        auto &Y = atom(G, "_y");
-
-        auto &Bar = definedAtom(G, "_bar");
-        auto &Foo = definedAtom(G, "_foo");
-        auto &Foo_1 = definedAtom(G, "_foo.1");
-        auto &Foo_2 = definedAtom(G, "_foo.2");
-        auto &X = definedAtom(G, "_x");
-        auto &P = definedAtom(G, "_p");
-
-        // Check unsigned reloc for _p
-        {
-          EXPECT_EQ(P.edges_size(), 1U) << "Unexpected number of relocations";
-          EXPECT_EQ(P.edges().begin()->getKind(), Pointer64)
-              << "Unexpected edge kind for _p";
-          EXPECT_THAT_EXPECTED(readInt<uint64_t>(G, P),
-                               HasValue(X.getAddress()))
-              << "Unsigned relocation did not apply correctly";
-        }
-
-        // Check that _bar is a call-via-stub to _baz.
-        // This will check that the call goes to a stub, that the stub is an
-        // indirect call, and that the pointer for the indirect call points to
-        // baz.
-        {
-          EXPECT_EQ(Bar.edges_size(), 1U)
-              << "Incorrect number of edges for bar";
-          EXPECT_EQ(Bar.edges().begin()->getKind(), Branch32)
-              << "Unexpected edge kind for _bar";
-          verifyCallViaStub(Dis, G, Bar, *Bar.edges().begin(), Baz);
-        }
-
-        // Check that _foo is a direct call to _bar.
-        {
-          EXPECT_EQ(Foo.edges_size(), 1U)
-              << "Incorrect number of edges for foo";
-          EXPECT_EQ(Foo.edges().begin()->getKind(), Branch32);
-          verifyCall(Dis, G, Foo, *Foo.edges().begin(), Bar);
-        }
-
-        // Check .got load in _foo.1
-        {
-          EXPECT_EQ(Foo_1.edges_size(), 1U)
-              << "Incorrect number of edges for foo_1";
-          EXPECT_EQ(Foo_1.edges().begin()->getKind(), PCRel32);
-          verifyGOTLoad(G, Foo_1, *Foo_1.edges().begin(), Y);
-        }
-
-        // Check PCRel ref to _p in _foo.2
-        {
-          EXPECT_EQ(Foo_2.edges_size(), 1U)
-              << "Incorrect number of edges for foo_2";
-          EXPECT_EQ(Foo_2.edges().begin()->getKind(), PCRel32);
-
-          JITTargetAddress FixupAddress =
-              Foo_2.getAddress() + Foo_2.edges().begin()->getOffset();
-          uint64_t PCRelDelta = P.getAddress() - (FixupAddress + 4);
-
-          EXPECT_THAT_EXPECTED(decodeImmediateOperand(Dis, Foo_2, 4, 0),
-                               HasValue(PCRelDelta))
-              << "PCRel load does not reference expected target";
-        }
-      });
-}

Copied: llvm/trunk/unittests/ExecutionEngine/JITLink/MachO_x86_64_Tests.cpp (from r358865, llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTest_MachO_x86_64_Tests.cpp)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ExecutionEngine/JITLink/MachO_x86_64_Tests.cpp?p2=llvm/trunk/unittests/ExecutionEngine/JITLink/MachO_x86_64_Tests.cpp&p1=llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTest_MachO_x86_64_Tests.cpp&r1=358865&r2=358869&rev=358869&view=diff
==============================================================================
--- llvm/trunk/unittests/ExecutionEngine/JITLink/JITLinkTest_MachO_x86_64_Tests.cpp (original)
+++ llvm/trunk/unittests/ExecutionEngine/JITLink/MachO_x86_64_Tests.cpp Sun Apr 21 20:03:09 2019
@@ -1,4 +1,4 @@
-//===---- JITLinkTest_MachO_x86_64.cpp - Tests for JITLink MachO/x86-64 ---===//
+//===--------- MachO_x86_64.cpp - Tests for JITLink MachO/x86-64 ----------===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -9,7 +9,7 @@
 #include "JITLinkTestCommon.h"
 
 #include "llvm/ADT/DenseSet.h"
-#include "llvm/ExecutionEngine/JITLink/JITLink_MachO_x86_64.h"
+#include "llvm/ExecutionEngine/JITLink/MachO_x86_64.h"
 #include "llvm/Testing/Support/Error.h"
 
 #include "gtest/gtest.h"




More information about the llvm-commits mailing list