Adding-symbols-from-an-object-file.html 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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: Adding symbols from an object file</title>
  21. <meta name="description" content="Untitled Document: Adding symbols from an object file">
  22. <meta name="keywords" content="Untitled Document: Adding symbols from an object file">
  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="Adding-Symbols-to-the-Hash-Table.html#Adding-Symbols-to-the-Hash-Table" rel="up" title="Adding Symbols to the Hash Table">
  31. <link href="Adding-symbols-from-an-archive.html#Adding-symbols-from-an-archive" rel="next" title="Adding symbols from an archive">
  32. <link href="Differing-file-formats.html#Differing-file-formats" rel="prev" title="Differing file formats">
  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="Adding-symbols-from-an-object-file"></a>
  64. <div class="header">
  65. <p>
  66. Next: <a href="Adding-symbols-from-an-archive.html#Adding-symbols-from-an-archive" accesskey="n" rel="next">Adding symbols from an archive</a>, Previous: <a href="Differing-file-formats.html#Differing-file-formats" accesskey="p" rel="prev">Differing file formats</a>, Up: <a href="Adding-Symbols-to-the-Hash-Table.html#Adding-Symbols-to-the-Hash-Table" accesskey="u" rel="up">Adding Symbols to the Hash Table</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="Adding-symbols-from-an-object-file-1"></a>
  70. <h4 class="subsubsection">2.17.2.2 Adding symbols from an object file</h4>
  71. <p>When the <code>_bfd_link_add_symbols</code> routine is passed an object
  72. file, it must add all externally visible symbols in that
  73. object file to the hash table. The actual work of adding the
  74. symbol to the hash table is normally handled by the function
  75. <code>_bfd_generic_link_add_one_symbol</code>. The
  76. <code>_bfd_link_add_symbols</code> routine is responsible for reading
  77. all the symbols from the object file and passing the correct
  78. information to <code>_bfd_generic_link_add_one_symbol</code>.
  79. </p>
  80. <p>The <code>_bfd_link_add_symbols</code> routine should not use
  81. <code>bfd_canonicalize_symtab</code> to read the symbols. The point of
  82. providing this routine is to avoid the overhead of converting
  83. the symbols into generic <code>asymbol</code> structures.
  84. </p>
  85. <a name="index-_005fbfd_005fgeneric_005flink_005fadd_005fone_005fsymbol"></a>
  86. <p><code>_bfd_generic_link_add_one_symbol</code> handles the details of
  87. combining common symbols, warning about multiple definitions,
  88. and so forth. It takes arguments which describe the symbol to
  89. add, notably symbol flags, a section, and an offset. The
  90. symbol flags include such things as <code>BSF_WEAK</code> or
  91. <code>BSF_INDIRECT</code>. The section is a section in the object
  92. file, or something like <code>bfd_und_section_ptr</code> for an undefined
  93. symbol or <code>bfd_com_section_ptr</code> for a common symbol.
  94. </p>
  95. <p>If the <code>_bfd_final_link</code> routine is also going to need to
  96. read the symbol information, the <code>_bfd_link_add_symbols</code>
  97. routine should save it somewhere attached to the object file
  98. BFD. However, the information should only be saved if the
  99. <code>keep_memory</code> field of the <code>info</code> argument is TRUE, so
  100. that the <code>-no-keep-memory</code> linker switch is effective.
  101. </p>
  102. <p>The a.out function which adds symbols from an object file is
  103. <code>aout_link_add_object_symbols</code>, and most of the interesting
  104. work is in <code>aout_link_add_symbols</code>. The latter saves
  105. pointers to the hash tables entries created by
  106. <code>_bfd_generic_link_add_one_symbol</code> indexed by symbol number,
  107. so that the <code>_bfd_final_link</code> routine does not have to call
  108. the hash table lookup routine to locate the entry.
  109. </p>
  110. <hr>
  111. <div class="header">
  112. <p>
  113. Next: <a href="Adding-symbols-from-an-archive.html#Adding-symbols-from-an-archive" accesskey="n" rel="next">Adding symbols from an archive</a>, Previous: <a href="Differing-file-formats.html#Differing-file-formats" accesskey="p" rel="prev">Differing file formats</a>, Up: <a href="Adding-Symbols-to-the-Hash-Table.html#Adding-Symbols-to-the-Hash-Table" accesskey="u" rel="up">Adding Symbols to the Hash Table</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>
  114. </div>
  115. </body>
  116. </html>