JIT-Interface.html 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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-2020 Free Software Foundation, Inc.
  4. Permission is granted to copy, distribute and/or modify this document
  5. under the terms of the GNU Free Documentation License, Version 1.3 or
  6. any later version published by the Free Software Foundation; with the
  7. Invariant Sections being "Free Software" and "Free Software Needs
  8. Free Documentation", with the Front-Cover Texts being "A GNU Manual,"
  9. and with the Back-Cover Texts as in (a) below.
  10. (a) The FSF's Back-Cover Text is: "You are free to copy and modify
  11. this GNU Manual. Buying copies from GNU Press supports the FSF in
  12. developing GNU and promoting software freedom." -->
  13. <!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
  14. <head>
  15. <title>Debugging with GDB: JIT Interface</title>
  16. <meta name="description" content="Debugging with GDB: JIT Interface">
  17. <meta name="keywords" content="Debugging with GDB: JIT Interface">
  18. <meta name="resource-type" content="document">
  19. <meta name="distribution" content="global">
  20. <meta name="Generator" content="makeinfo">
  21. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  22. <link href="index.html#Top" rel="start" title="Top">
  23. <link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
  24. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  25. <link href="index.html#Top" rel="up" title="Top">
  26. <link href="Declarations.html#Declarations" rel="next" title="Declarations">
  27. <link href="Source-Annotations.html#Source-Annotations" rel="previous" title="Source Annotations">
  28. <style type="text/css">
  29. <!--
  30. a.summary-letter {text-decoration: none}
  31. blockquote.smallquotation {font-size: smaller}
  32. div.display {margin-left: 3.2em}
  33. div.example {margin-left: 3.2em}
  34. div.indentedblock {margin-left: 3.2em}
  35. div.lisp {margin-left: 3.2em}
  36. div.smalldisplay {margin-left: 3.2em}
  37. div.smallexample {margin-left: 3.2em}
  38. div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
  39. div.smalllisp {margin-left: 3.2em}
  40. kbd {font-style:oblique}
  41. pre.display {font-family: inherit}
  42. pre.format {font-family: inherit}
  43. pre.menu-comment {font-family: serif}
  44. pre.menu-preformatted {font-family: serif}
  45. pre.smalldisplay {font-family: inherit; font-size: smaller}
  46. pre.smallexample {font-size: smaller}
  47. pre.smallformat {font-family: inherit; font-size: smaller}
  48. pre.smalllisp {font-size: smaller}
  49. span.nocodebreak {white-space:nowrap}
  50. span.nolinebreak {white-space:nowrap}
  51. span.roman {font-family:serif; font-weight:normal}
  52. span.sansserif {font-family:sans-serif; font-weight:normal}
  53. ul.no-bullet {list-style: none}
  54. -->
  55. </style>
  56. </head>
  57. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  58. <a name="JIT-Interface"></a>
  59. <div class="header">
  60. <p>
  61. Next: <a href="In_002dProcess-Agent.html#In_002dProcess-Agent" accesskey="n" rel="next">In-Process Agent</a>, Previous: <a href="Annotations.html#Annotations" accesskey="p" rel="previous">Annotations</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</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>
  62. </div>
  63. <hr>
  64. <a name="JIT-Compilation-Interface"></a>
  65. <h2 class="chapter">29 JIT Compilation Interface</h2>
  66. <a name="index-just_002din_002dtime-compilation"></a>
  67. <a name="index-JIT-compilation-interface"></a>
  68. <p>This chapter documents <small>GDB</small>&rsquo;s <em>just-in-time</em> (JIT) compilation
  69. interface. A JIT compiler is a program or library that generates native
  70. executable code at runtime and executes it, usually in order to achieve good
  71. performance while maintaining platform independence.
  72. </p>
  73. <p>Programs that use JIT compilation are normally difficult to debug because
  74. portions of their code are generated at runtime, instead of being loaded from
  75. object files, which is where <small>GDB</small> normally finds the program&rsquo;s symbols
  76. and debug information. In order to debug programs that use JIT compilation,
  77. <small>GDB</small> has an interface that allows the program to register in-memory
  78. symbol files with <small>GDB</small> at runtime.
  79. </p>
  80. <p>If you are using <small>GDB</small> to debug a program that uses this interface, then
  81. it should work transparently so long as you have not stripped the binary. If
  82. you are developing a JIT compiler, then the interface is documented in the rest
  83. of this chapter. At this time, the only known client of this interface is the
  84. LLVM JIT.
  85. </p>
  86. <p>Broadly speaking, the JIT interface mirrors the dynamic loader interface. The
  87. JIT compiler communicates with <small>GDB</small> by writing data into a global
  88. variable and calling a function at a well-known symbol. When <small>GDB</small>
  89. attaches, it reads a linked list of symbol files from the global variable to
  90. find existing code, and puts a breakpoint in the function so that it can find
  91. out about additional code.
  92. </p>
  93. <table class="menu" border="0" cellspacing="0">
  94. <tr><td align="left" valign="top">&bull; <a href="Declarations.html#Declarations" accesskey="1">Declarations</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Relevant C struct declarations
  95. </td></tr>
  96. <tr><td align="left" valign="top">&bull; <a href="Registering-Code.html#Registering-Code" accesskey="2">Registering Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Steps to register code
  97. </td></tr>
  98. <tr><td align="left" valign="top">&bull; <a href="Unregistering-Code.html#Unregistering-Code" accesskey="3">Unregistering Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Steps to unregister code
  99. </td></tr>
  100. <tr><td align="left" valign="top">&bull; <a href="Custom-Debug-Info.html#Custom-Debug-Info" accesskey="4">Custom Debug Info</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Emit debug information in a custom format
  101. </td></tr>
  102. </table>
  103. <hr>
  104. <div class="header">
  105. <p>
  106. Next: <a href="In_002dProcess-Agent.html#In_002dProcess-Agent" accesskey="n" rel="next">In-Process Agent</a>, Previous: <a href="Annotations.html#Annotations" accesskey="p" rel="previous">Annotations</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</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>
  107. </div>
  108. </body>
  109. </html>