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> &nbsp; [<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