1094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea/*
2094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * Copyright 2012, The Android Open Source Project
3094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea *
4094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * Licensed under the Apache License, Version 2.0 (the "License");
5094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * you may not use this file except in compliance with the License.
6094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * You may obtain a copy of the License at
7094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea *
8094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea *     http://www.apache.org/licenses/LICENSE-2.0
9094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea *
10094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * Unless required by applicable law or agreed to in writing, software
11094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * distributed under the License is distributed on an "AS IS" BASIS,
12094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * See the License for the specific language governing permissions and
14094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea * limitations under the License.
15094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea */
16094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
17094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// This file contains portions derived from LLVM, with the original copyright
18094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// header below:
19094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea//===-------------- GDBJIT.h - Register debug symbols for JIT -------------===//
20094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea//
21094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea//                     The LLVM Compiler Infrastructure
22094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea//
23094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// This file is distributed under the University of Illinois Open Source
24094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// License. See LICENSE.TXT for details.
25094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea//
26094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea//===----------------------------------------------------------------------===//
27094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea//
28094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// This file defines the data structures used by JIT engines to register object
29094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// files (ideally containing debug info) with GDB.
30094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea//
31094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea//===----------------------------------------------------------------------===//
32094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
33094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea#ifndef BCC_EXECUTION_ENGINE_GDB_JIT_H
34094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea#define BCC_EXECUTION_ENGINE_GDB_JIT_H
35094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
36c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#include <llvm/Support/DataTypes.h>
37c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#include <llvm/Support/Compiler.h>
38094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
39094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// This must be kept in sync with gdb/gdb/jit.h .
40094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Maleaextern "C" {
41094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
42094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  typedef enum {
43094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    JIT_NOACTION = 0,
44094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    JIT_REGISTER_FN,
45094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    JIT_UNREGISTER_FN
46094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  } jit_actions_t;
47094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
48094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  struct jit_code_entry {
49094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    struct jit_code_entry *next_entry;
50094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    struct jit_code_entry *prev_entry;
51094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    const char *symfile_addr;
52094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    uint64_t symfile_size;
53094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  };
54094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
55094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  struct jit_descriptor {
56094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    uint32_t version;
57094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    // This should be jit_actions_t, but we want to be specific about the
58094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    // bit-width.
59094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    uint32_t action_flag;
60094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    struct jit_code_entry *relevant_entry;
61094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    struct jit_code_entry *first_entry;
62094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  };
63094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
64094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  // GDB 7.0+ puts a (silent) breakpoint in this function.
65094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  LLVM_ATTRIBUTE_NOINLINE void __jit_debug_register_code();
66094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
67094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea}
68094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
69094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea#endif // BCC_EXECUTION_ENGINE_GDB_JIT_H
70