blob: 91cb6fa90df6b054570d45a9e8adbedd544f4d1e [file] [log] [blame]
<html lang="en">
<head>
<title>Registering Code - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="JIT-Interface.html#JIT-Interface" title="JIT Interface">
<link rel="prev" href="Declarations.html#Declarations" title="Declarations">
<link rel="next" href="Unregistering-Code.html#Unregistering-Code" title="Unregistering Code">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.
(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
this GNU Manual. Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Registering-Code"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Unregistering-Code.html#Unregistering-Code">Unregistering Code</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Declarations.html#Declarations">Declarations</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="JIT-Interface.html#JIT-Interface">JIT Interface</a>
<hr>
</div>
<h3 class="section">29.2 Registering Code</h3>
<p>To register code with <span class="sc">gdb</span>, the JIT should follow this protocol:
<ul>
<li>Generate an object file in memory with symbols and other desired debug
information. The file must include the virtual addresses of the sections.
<li>Create a code entry for the file, which gives the start and size of the symbol
file.
<li>Add it to the linked list in the JIT descriptor.
<li>Point the relevant_entry field of the descriptor at the entry.
<li>Set <code>action_flag</code> to <code>JIT_REGISTER</code> and call
<code>__jit_debug_register_code</code>.
</ul>
<p>When <span class="sc">gdb</span> is attached and the breakpoint fires, <span class="sc">gdb</span> uses the
<code>relevant_entry</code> pointer so it doesn't have to walk the list looking for
new code. However, the linked list must still be maintained in order to allow
<span class="sc">gdb</span> to attach to a running process and still find the symbol files.
</body></html>