1 //===- JITLoaderGDB.h - Register objects via GDB JIT interface -*- C++ -*-===//
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 // Register objects for access by debuggers via the GDB JIT interface.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef LLVM_EXECUTIONENGINE_ORC_TARGETPROCESS_JITLOADERGDB_H
14 #define LLVM_EXECUTIONENGINE_ORC_TARGETPROCESS_JITLOADERGDB_H
15 
16 #include "llvm/ExecutionEngine/Orc/Shared/WrapperFunctionUtils.h"
17 #include <cstdint>
18 
19 // Keep in sync with gdb/gdb/jit.h
20 extern "C" {
21 
22 typedef enum {
23   JIT_NOACTION = 0,
24   JIT_REGISTER_FN,
25   JIT_UNREGISTER_FN
26 } jit_actions_t;
27 
28 struct jit_code_entry {
29   struct jit_code_entry *next_entry;
30   struct jit_code_entry *prev_entry;
31   const char *symfile_addr;
32   uint64_t symfile_size;
33 };
34 
35 struct jit_descriptor {
36   uint32_t version;
37   // This should be jit_actions_t, but we want to be specific about the
38   // bit-width.
39   uint32_t action_flag;
40   struct jit_code_entry *relevant_entry;
41   struct jit_code_entry *first_entry;
42 };
43 }
44 
45 extern "C" llvm::orc::shared::CWrapperFunctionResult
46 llvm_orc_registerJITLoaderGDBWrapper(const char *Data, uint64_t Size);
47 
48 extern "C" llvm::orc::shared::CWrapperFunctionResult
49 llvm_orc_registerJITLoaderGDBAllocAction(const char *Data, size_t Size);
50 
51 #endif // LLVM_EXECUTIONENGINE_ORC_TARGETPROCESS_JITLOADERGDB_H
52