1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<!-- Copyright (C) 1988-2021 Free Software Foundation, Inc. 4 5Permission is granted to copy, distribute and/or modify this document 6under the terms of the GNU Free Documentation License, Version 1.3 or 7any later version published by the Free Software Foundation; with the 8Invariant Sections being "Free Software" and "Free Software Needs 9Free Documentation", with the Front-Cover Texts being "A GNU Manual," 10and with the Back-Cover Texts as in (a) below. 11 12(a) The FSF's Back-Cover Text is: "You are free to copy and modify 13this GNU Manual. Buying copies from GNU Press supports the FSF in 14developing GNU and promoting software freedom." --> 15<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ --> 16<head> 17<title>Debugging with GDB: Declarations</title> 18 19<meta name="description" content="Debugging with GDB: Declarations"> 20<meta name="keywords" content="Debugging with GDB: Declarations"> 21<meta name="resource-type" content="document"> 22<meta name="distribution" content="global"> 23<meta name="Generator" content="makeinfo"> 24<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 25<link href="index.html#Top" rel="start" title="Top"> 26<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index"> 27<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents"> 28<link href="JIT-Interface.html#JIT-Interface" rel="up" title="JIT Interface"> 29<link href="Registering-Code.html#Registering-Code" rel="next" title="Registering Code"> 30<link href="JIT-Interface.html#JIT-Interface" rel="previous" title="JIT Interface"> 31<style type="text/css"> 32<!-- 33a.summary-letter {text-decoration: none} 34blockquote.smallquotation {font-size: smaller} 35div.display {margin-left: 3.2em} 36div.example {margin-left: 3.2em} 37div.indentedblock {margin-left: 3.2em} 38div.lisp {margin-left: 3.2em} 39div.smalldisplay {margin-left: 3.2em} 40div.smallexample {margin-left: 3.2em} 41div.smallindentedblock {margin-left: 3.2em; font-size: smaller} 42div.smalllisp {margin-left: 3.2em} 43kbd {font-style:oblique} 44pre.display {font-family: inherit} 45pre.format {font-family: inherit} 46pre.menu-comment {font-family: serif} 47pre.menu-preformatted {font-family: serif} 48pre.smalldisplay {font-family: inherit; font-size: smaller} 49pre.smallexample {font-size: smaller} 50pre.smallformat {font-family: inherit; font-size: smaller} 51pre.smalllisp {font-size: smaller} 52span.nocodebreak {white-space:nowrap} 53span.nolinebreak {white-space:nowrap} 54span.roman {font-family:serif; font-weight:normal} 55span.sansserif {font-family:sans-serif; font-weight:normal} 56ul.no-bullet {list-style: none} 57--> 58</style> 59 60 61</head> 62 63<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> 64<a name="Declarations"></a> 65<div class="header"> 66<p> 67Next: <a href="Registering-Code.html#Registering-Code" accesskey="n" rel="next">Registering Code</a>, Up: <a href="JIT-Interface.html#JIT-Interface" accesskey="u" rel="up">JIT Interface</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p> 68</div> 69<hr> 70<a name="JIT-Declarations"></a> 71<h3 class="section">29.1 JIT Declarations</h3> 72 73<p>These are the relevant struct declarations that a C program should include to 74implement the interface: 75</p> 76<div class="smallexample"> 77<pre class="smallexample">typedef enum 78{ 79 JIT_NOACTION = 0, 80 JIT_REGISTER_FN, 81 JIT_UNREGISTER_FN 82} jit_actions_t; 83 84struct jit_code_entry 85{ 86 struct jit_code_entry *next_entry; 87 struct jit_code_entry *prev_entry; 88 const char *symfile_addr; 89 uint64_t symfile_size; 90}; 91 92struct jit_descriptor 93{ 94 uint32_t version; 95 /* This type should be jit_actions_t, but we use uint32_t 96 to be explicit about the bitwidth. */ 97 uint32_t action_flag; 98 struct jit_code_entry *relevant_entry; 99 struct jit_code_entry *first_entry; 100}; 101 102/* GDB puts a breakpoint in this function. */ 103void __attribute__((noinline)) __jit_debug_register_code() { }; 104 105/* Make sure to specify the version statically, because the 106 debugger may check the version before we can set it. */ 107struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 }; 108</pre></div> 109 110<p>If the JIT is multi-threaded, then it is important that the JIT synchronize any 111modifications to this global data properly, which can easily be done by putting 112a global mutex around modifications to these structures. 113</p> 114 115 116 117</body> 118</html> 119