<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- This file documents the BFD library.

Copyright (C) 1991-2015 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 "GNU General Public License" and "Funding
Free Software", the Front-Cover texts being (a) (see below), and with
the Back-Cover Texts being (b) (see below).  A copy of the license is
included in the section entitled "GNU Free Documentation License".

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Untitled Document: Writing Symbols</title>

<meta name="description" content="Untitled Document: Writing Symbols">
<meta name="keywords" content="Untitled Document: Writing Symbols">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="BFD-Index.html#BFD-Index" rel="index" title="BFD Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Symbols.html#Symbols" rel="up" title="Symbols">
<link href="Mini-Symbols.html#Mini-Symbols" rel="next" title="Mini Symbols">
<link href="Reading-Symbols.html#Reading-Symbols" rel="prev" title="Reading Symbols">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Writing-Symbols"></a>
<div class="header">
<p>
Next: <a href="Mini-Symbols.html#Mini-Symbols" accesskey="n" rel="next">Mini Symbols</a>, Previous: <a href="Reading-Symbols.html#Reading-Symbols" accesskey="p" rel="prev">Reading Symbols</a>, Up: <a href="Symbols.html#Symbols" accesskey="u" rel="up">Symbols</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>
</div>
<hr>
<a name="Writing-symbols"></a>
<h4 class="subsection">2.7.2 Writing symbols</h4>
<p>Writing of a symbol table is automatic when a BFD open for
writing is closed. The application attaches a vector of
pointers to pointers to symbols to the BFD being written, and
fills in the symbol count. The close and cleanup code reads
through the table provided and performs all the necessary
operations. The BFD output code must always be provided with an
&ldquo;owned&rdquo; symbol: one which has come from another BFD, or one
which has been created using <code>bfd_make_empty_symbol</code>.  Here is an
example showing the creation of a symbol table with only one element:
</p>
<div class="example">
<pre class="example">       #include &quot;sysdep.h&quot;
       #include &quot;bfd.h&quot;
       int main (void)
       {
         bfd *abfd;
         asymbol *ptrs[2];
         asymbol *new;

         abfd = bfd_openw (&quot;foo&quot;,&quot;a.out-sunos-big&quot;);
         bfd_set_format (abfd, bfd_object);
         new = bfd_make_empty_symbol (abfd);
         new-&gt;name = &quot;dummy_symbol&quot;;
         new-&gt;section = bfd_make_section_old_way (abfd, &quot;.text&quot;);
         new-&gt;flags = BSF_GLOBAL;
         new-&gt;value = 0x12345;

         ptrs[0] = new;
         ptrs[1] = 0;

         bfd_set_symtab (abfd, ptrs, 1);
         bfd_close (abfd);
         return 0;
       }

       ./makesym
       nm foo
       00012345 A dummy_symbol
</pre></div>

<p>Many formats cannot represent arbitrary symbol information; for
instance, the <code>a.out</code> object format does not allow an
arbitrary number of sections. A symbol pointing to a section
which is not one  of <code>.text</code>, <code>.data</code> or <code>.bss</code> cannot
be described.
</p>



</body>
</html>
