Creating-a-Linker-Hash-Table.html 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- This file documents the BFD library.
  4. Copyright (C) 1991-2017 Free Software Foundation, Inc.
  5. Permission is granted to copy, distribute and/or modify this document
  6. under the terms of the GNU Free Documentation License, Version 1.3 or
  7. any later version published by the Free Software Foundation; with the
  8. Invariant Sections being "GNU General Public License" and "Funding
  9. Free Software", the Front-Cover texts being (a) (see below), and with
  10. the Back-Cover Texts being (b) (see below). A copy of the license is
  11. included in the section entitled "GNU Free Documentation License".
  12. (a) The FSF's Front-Cover Text is:
  13. A GNU Manual
  14. (b) The FSF's Back-Cover Text is:
  15. You have freedom to copy and modify this GNU Manual, like GNU
  16. software. Copies published by the Free Software Foundation raise
  17. funds for GNU development. -->
  18. <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
  19. <head>
  20. <title>Untitled Document: Creating a Linker Hash Table</title>
  21. <meta name="description" content="Untitled Document: Creating a Linker Hash Table">
  22. <meta name="keywords" content="Untitled Document: Creating a Linker Hash Table">
  23. <meta name="resource-type" content="document">
  24. <meta name="distribution" content="global">
  25. <meta name="Generator" content="makeinfo">
  26. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  27. <link href="index.html#Top" rel="start" title="Top">
  28. <link href="BFD-Index.html#BFD-Index" rel="index" title="BFD Index">
  29. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  30. <link href="Linker-Functions.html#Linker-Functions" rel="up" title="Linker Functions">
  31. <link href="Adding-Symbols-to-the-Hash-Table.html#Adding-Symbols-to-the-Hash-Table" rel="next" title="Adding Symbols to the Hash Table">
  32. <link href="Linker-Functions.html#Linker-Functions" rel="prev" title="Linker Functions">
  33. <style type="text/css">
  34. <!--
  35. a.summary-letter {text-decoration: none}
  36. blockquote.smallquotation {font-size: smaller}
  37. div.display {margin-left: 3.2em}
  38. div.example {margin-left: 3.2em}
  39. div.indentedblock {margin-left: 3.2em}
  40. div.lisp {margin-left: 3.2em}
  41. div.smalldisplay {margin-left: 3.2em}
  42. div.smallexample {margin-left: 3.2em}
  43. div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
  44. div.smalllisp {margin-left: 3.2em}
  45. kbd {font-style:oblique}
  46. pre.display {font-family: inherit}
  47. pre.format {font-family: inherit}
  48. pre.menu-comment {font-family: serif}
  49. pre.menu-preformatted {font-family: serif}
  50. pre.smalldisplay {font-family: inherit; font-size: smaller}
  51. pre.smallexample {font-size: smaller}
  52. pre.smallformat {font-family: inherit; font-size: smaller}
  53. pre.smalllisp {font-size: smaller}
  54. span.nocodebreak {white-space:nowrap}
  55. span.nolinebreak {white-space:nowrap}
  56. span.roman {font-family:serif; font-weight:normal}
  57. span.sansserif {font-family:sans-serif; font-weight:normal}
  58. ul.no-bullet {list-style: none}
  59. -->
  60. </style>
  61. </head>
  62. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  63. <a name="Creating-a-Linker-Hash-Table"></a>
  64. <div class="header">
  65. <p>
  66. Next: <a href="Adding-Symbols-to-the-Hash-Table.html#Adding-Symbols-to-the-Hash-Table" accesskey="n" rel="next">Adding Symbols to the Hash Table</a>, Previous: <a href="Linker-Functions.html#Linker-Functions" accesskey="p" rel="prev">Linker Functions</a>, Up: <a href="Linker-Functions.html#Linker-Functions" accesskey="u" rel="up">Linker Functions</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="BFD-Index.html#BFD-Index" title="Index" rel="index">Index</a>]</p>
  67. </div>
  68. <hr>
  69. <a name="Creating-a-linker-hash-table"></a>
  70. <h4 class="subsection">2.17.1 Creating a linker hash table</h4>
  71. <a name="index-_005fbfd_005flink_005fhash_005ftable_005fcreate-in-target-vector"></a>
  72. <a name="index-target-vector-_0028_005fbfd_005flink_005fhash_005ftable_005fcreate_0029"></a>
  73. <p>The linker routines must create a hash table, which must be
  74. derived from <code>struct bfd_link_hash_table</code> described in
  75. <code>bfdlink.c</code>. See <a href="Hash-Tables.html#Hash-Tables">Hash Tables</a>, for information on how to
  76. create a derived hash table. This entry point is called using
  77. the target vector of the linker output file.
  78. </p>
  79. <p>The <code>_bfd_link_hash_table_create</code> entry point must allocate
  80. and initialize an instance of the desired hash table. If the
  81. back end does not require any additional information to be
  82. stored with the entries in the hash table, the entry point may
  83. simply create a <code>struct bfd_link_hash_table</code>. Most likely,
  84. however, some additional information will be needed.
  85. </p>
  86. <p>For example, with each entry in the hash table the a.out
  87. linker keeps the index the symbol has in the final output file
  88. (this index number is used so that when doing a relocatable
  89. link the symbol index used in the output file can be quickly
  90. filled in when copying over a reloc). The a.out linker code
  91. defines the required structures and functions for a hash table
  92. derived from <code>struct bfd_link_hash_table</code>. The a.out linker
  93. hash table is created by the function
  94. <code>NAME(aout,link_hash_table_create)</code>; it simply allocates
  95. space for the hash table, initializes it, and returns a
  96. pointer to it.
  97. </p>
  98. <p>When writing the linker routines for a new back end, you will
  99. generally not know exactly which fields will be required until
  100. you have finished. You should simply create a new hash table
  101. which defines no additional fields, and then simply add fields
  102. as they become necessary.
  103. </p>
  104. <hr>
  105. <div class="header">
  106. <p>
  107. Next: <a href="Adding-Symbols-to-the-Hash-Table.html#Adding-Symbols-to-the-Hash-Table" accesskey="n" rel="next">Adding Symbols to the Hash Table</a>, Previous: <a href="Linker-Functions.html#Linker-Functions" accesskey="p" rel="prev">Linker Functions</a>, Up: <a href="Linker-Functions.html#Linker-Functions" accesskey="u" rel="up">Linker Functions</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="BFD-Index.html#BFD-Index" title="Index" rel="index">Index</a>]</p>
  108. </div>
  109. </body>
  110. </html>