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