xref: /third_party/elfutils/doc/elfutils.sgml (revision da0c48c4)
1da0c48c4Sopenharmony_ci<!doctype book PUBLIC "-//OASIS//DTD DocBook V4.1//EN"[
2da0c48c4Sopenharmony_ci<!ENTITY package "<filename>new-bu</filename>">
3da0c48c4Sopenharmony_ci]>
4da0c48c4Sopenharmony_ci
5da0c48c4Sopenharmony_ci<book>
6da0c48c4Sopenharmony_ci  <title>New Binutils User's and Reference Manual</title>
7da0c48c4Sopenharmony_ci
8da0c48c4Sopenharmony_ci  <chapter>
9da0c48c4Sopenharmony_ci    <title><filename>libelf</filename> <acronym>ABI</acronym></title>
10da0c48c4Sopenharmony_ci
11da0c48c4Sopenharmony_ci    <simpara>The <acronym>ABI</acronym> of the
12da0c48c4Sopenharmony_ci    <filename>libelf</filename> implemented in the &package; package
13da0c48c4Sopenharmony_ci    is following that of Sun's implementation which in turn in derived
14da0c48c4Sopenharmony_ci    from the original SysVr4 implementation.  There are some
15da0c48c4Sopenharmony_ci    extensions over Sun's versions, though, which makes it impossible
16da0c48c4Sopenharmony_ci    to replace this implementation with Sun's.</simpara>
17da0c48c4Sopenharmony_ci
18da0c48c4Sopenharmony_ci    <beginpage>
19da0c48c4Sopenharmony_ci
20da0c48c4Sopenharmony_ci    <refentry xreflabel="Elf_Data" id="ElfUData">
21da0c48c4Sopenharmony_ci      <refnamediv>
22da0c48c4Sopenharmony_ci	<refname>Elf_Data</refname>
23da0c48c4Sopenharmony_ci	<refpurpose>Descriptor for Data Buffer</refpurpose>
24da0c48c4Sopenharmony_ci      </refnamediv>
25da0c48c4Sopenharmony_ci
26da0c48c4Sopenharmony_ci      <refsynopsisdiv>
27da0c48c4Sopenharmony_ci	<synopsis>
28da0c48c4Sopenharmony_ci#include &lt;libelf.h&gt;
29da0c48c4Sopenharmony_ci</synopsis>
30da0c48c4Sopenharmony_ci      </refsynopsisdiv>
31da0c48c4Sopenharmony_ci
32da0c48c4Sopenharmony_ci      <refsect1>
33da0c48c4Sopenharmony_ci	<title>Description</title>
34da0c48c4Sopenharmony_ci
35da0c48c4Sopenharmony_ci	<simpara>The <structname>Elf_Data</structname> structure is as
36da0c48c4Sopenharmony_ci	a descriptor for a data buffer associated with a section.
37da0c48c4Sopenharmony_ci	Every data buffer is associated with a specific section (see
38da0c48c4Sopenharmony_ci	<!-- xref --><structname>Elf_Scn</structname>).</simpara>
39da0c48c4Sopenharmony_ci
40da0c48c4Sopenharmony_ci	<simpara>A data buffer is created when reading a file.  In
41da0c48c4Sopenharmony_ci	this case only a single buffer is present in the section.  The
42da0c48c4Sopenharmony_ci	user can add as many sections as wanted to a section and they
43da0c48c4Sopenharmony_ci	can be retrieved using the <function>elf_getdata</function>
44da0c48c4Sopenharmony_ci	and <function>elf_rawdata</function> functions.<!-- xref
45da0c48c4Sopenharmony_ci	--></simpara>
46da0c48c4Sopenharmony_ci
47da0c48c4Sopenharmony_ci	<simpara>The <structname>Elf_Data</structname> structure
48da0c48c4Sopenharmony_ci	contains the following members:</simpara>
49da0c48c4Sopenharmony_ci
50da0c48c4Sopenharmony_ci	<programlisting>
51da0c48c4Sopenharmony_ci   void         *d_buf
52da0c48c4Sopenharmony_ci   Elf_Type      d_type
53da0c48c4Sopenharmony_ci   size_t        d_size
54da0c48c4Sopenharmony_ci   off_t         d_off
55da0c48c4Sopenharmony_ci   size_t        d_align
56da0c48c4Sopenharmony_ci   unsigned int  d_version
57da0c48c4Sopenharmony_ci</programlisting>
58da0c48c4Sopenharmony_ci
59da0c48c4Sopenharmony_ci	<simpara>All of these members can be modified directly by the
60da0c48c4Sopenharmony_ci	user.  They can be used to resize a section, to change its
61da0c48c4Sopenharmony_ci	content or type, and many more tasks.  This is also true for
62da0c48c4Sopenharmony_ci	the data read from a file.  The meaning of each member is as
63da0c48c4Sopenharmony_ci	follows:</simpara>
64da0c48c4Sopenharmony_ci
65da0c48c4Sopenharmony_ci	<variablelist>
66da0c48c4Sopenharmony_ci	  <varlistentry>
67da0c48c4Sopenharmony_ci	    <term><structfield>d_buf</structfield></term>
68da0c48c4Sopenharmony_ci	    <listitem>
69da0c48c4Sopenharmony_ci	      <simpara>The <structfield>d_buf</structfield> member is
70da0c48c4Sopenharmony_ci	      the pointer to the buffer with the actual data.  When
71da0c48c4Sopenharmony_ci	      the ELF file was read from a file the first and only
72da0c48c4Sopenharmony_ci	      data buffer of a section is allocated by the
73da0c48c4Sopenharmony_ci	      <filename>libelf</filename> library.  The user should
74da0c48c4Sopenharmony_ci	      not try to resize or free this buffer.  When the user
75da0c48c4Sopenharmony_ci	      adds a new data buffer to a section the associated
76da0c48c4Sopenharmony_ci	      memory block is normally allocated by the user.  It is
77da0c48c4Sopenharmony_ci	      important that the buffer must have a lifetime at least
78da0c48c4Sopenharmony_ci	      until the ELF file is closed entirely (important when
79da0c48c4Sopenharmony_ci	      the buffer is allocated on the stack).  If the buffer is
80da0c48c4Sopenharmony_ci	      not allocated on the stack it is the user's
81da0c48c4Sopenharmony_ci	      responsibility to free the buffer after it is not used
82da0c48c4Sopenharmony_ci	      anymore.  The <structfield>d_buf</structfield> member
83da0c48c4Sopenharmony_ci	      can contain a null pointer if the data buffer is
84da0c48c4Sopenharmony_ci	      empty.</simpara>
85da0c48c4Sopenharmony_ci	    </listitem>
86da0c48c4Sopenharmony_ci	  </varlistentry>
87da0c48c4Sopenharmony_ci
88da0c48c4Sopenharmony_ci	  <varlistentry>
89da0c48c4Sopenharmony_ci	    <term><structfield>d_type</structfield></term>
90da0c48c4Sopenharmony_ci	    <listitem>
91da0c48c4Sopenharmony_ci	      <simpara>The <structfield>d_type</structfield>
92da0c48c4Sopenharmony_ci	      determines how the data of the buffer is interpreted.
93da0c48c4Sopenharmony_ci	      This type is determined from the section type and must
94da0c48c4Sopenharmony_ci	      be the same for all data buffers for a section.  See
95da0c48c4Sopenharmony_ci	      <!-- xref --><type>Elf_Type</type> for more information.
96da0c48c4Sopenharmony_ci	      The <function><link linkend="elfUgetdata"
97da0c48c4Sopenharmony_ci	      endterm="elfUgetdata.refname"></link></function>
98da0c48c4Sopenharmony_ci	      function uses this information to convert the data of
99da0c48c4Sopenharmony_ci	      the buffer between the external form and the form
100da0c48c4Sopenharmony_ci	      represented to the user and back if necessary.</simpara>
101da0c48c4Sopenharmony_ci	    </listitem>
102da0c48c4Sopenharmony_ci	  </varlistentry>
103da0c48c4Sopenharmony_ci
104da0c48c4Sopenharmony_ci	  <varlistentry>
105da0c48c4Sopenharmony_ci	    <term><structfield>d_version</structfield></term>
106da0c48c4Sopenharmony_ci	    <listitem>
107da0c48c4Sopenharmony_ci	      <simpara>The <structfield>d_version</structfield>
108da0c48c4Sopenharmony_ci              contains the ELF version of the file.</simpara>
109da0c48c4Sopenharmony_ci	    </listitem>
110da0c48c4Sopenharmony_ci	  </varlistentry>
111da0c48c4Sopenharmony_ci
112da0c48c4Sopenharmony_ci	  <varlistentry>
113da0c48c4Sopenharmony_ci	    <term><structfield>d_size</structfield></term>
114da0c48c4Sopenharmony_ci	    <listitem>
115da0c48c4Sopenharmony_ci	      <simpara>The <structfield>d_size</structfield> contains
116da0c48c4Sopenharmony_ci              the size of the buffer in bytes.</simpara>
117da0c48c4Sopenharmony_ci	    </listitem>
118da0c48c4Sopenharmony_ci	  </varlistentry>
119da0c48c4Sopenharmony_ci
120da0c48c4Sopenharmony_ci	  <varlistentry>
121da0c48c4Sopenharmony_ci	    <term><structfield>d_off</structfield></term>
122da0c48c4Sopenharmony_ci	    <listitem>
123da0c48c4Sopenharmony_ci	      <simpara>The <structfield>d_off</structfield> is the
124da0c48c4Sopenharmony_ci              offset into the section in bytes.</simpara>
125da0c48c4Sopenharmony_ci	    </listitem>
126da0c48c4Sopenharmony_ci	  </varlistentry>
127da0c48c4Sopenharmony_ci
128da0c48c4Sopenharmony_ci	  <varlistentry>
129da0c48c4Sopenharmony_ci	    <term><structfield>d_align</structfield></term>
130da0c48c4Sopenharmony_ci	    <listitem>
131da0c48c4Sopenharmony_ci	      <simpara>The <structfield>d_align</structfield> is the
132da0c48c4Sopenharmony_ci              address alignment of the section in bytes.</simpara>
133da0c48c4Sopenharmony_ci	    </listitem>
134da0c48c4Sopenharmony_ci	  </varlistentry>
135da0c48c4Sopenharmony_ci	</variablelist>
136da0c48c4Sopenharmony_ci      </refsect1>
137da0c48c4Sopenharmony_ci    </refentry>
138da0c48c4Sopenharmony_ci
139da0c48c4Sopenharmony_ci    <beginpage>
140da0c48c4Sopenharmony_ci
141da0c48c4Sopenharmony_ci    <refentry id="elfUgetdata">
142da0c48c4Sopenharmony_ci      <refnamediv>
143da0c48c4Sopenharmony_ci	<refname id="elfUgetdata.refname">elf_getdata</refname>
144da0c48c4Sopenharmony_ci	<refpurpose>Get washed data of section</refpurpose>
145da0c48c4Sopenharmony_ci      </refnamediv>
146da0c48c4Sopenharmony_ci
147da0c48c4Sopenharmony_ci      <refsynopsisdiv>
148da0c48c4Sopenharmony_ci	<funcsynopsis>
149da0c48c4Sopenharmony_ci	  <funcsynopsisinfo>
150da0c48c4Sopenharmony_ci#include &lt;libelf.h&gt;
151da0c48c4Sopenharmony_ci</funcsynopsisinfo>
152da0c48c4Sopenharmony_ci	  <funcprototype>
153da0c48c4Sopenharmony_ci	    <funcdef>Elf_Data *<function>elf_getdata</function></funcdef>
154da0c48c4Sopenharmony_ci	    <paramdef>Elf_Scn *<parameter>scn</parameter></paramdef>
155da0c48c4Sopenharmony_ci	    <paramdef>Elf_Data *<parameter>data</parameter></paramdef>
156da0c48c4Sopenharmony_ci	  </funcprototype>
157da0c48c4Sopenharmony_ci	</funcsynopsis>
158da0c48c4Sopenharmony_ci      </refsynopsisdiv>
159da0c48c4Sopenharmony_ci
160da0c48c4Sopenharmony_ci      <refsect1>
161da0c48c4Sopenharmony_ci	<title>Description</title>
162da0c48c4Sopenharmony_ci
163da0c48c4Sopenharmony_ci	<simpara>The <function>elf_getdata</function> function allows
164da0c48c4Sopenharmony_ci	the user to retrieve the data buffers of the section
165da0c48c4Sopenharmony_ci	<parameter>scn</parameter>.  There can be more than one buffer
166da0c48c4Sopenharmony_ci	if the user explicitly added them.  When a file is read the
167da0c48c4Sopenharmony_ci	<filename>libelf</filename> library creates exactly one data
168da0c48c4Sopenharmony_ci	buffer.</simpara>
169da0c48c4Sopenharmony_ci
170da0c48c4Sopenharmony_ci	<simpara>The first buffer in the list can be obtained by
171da0c48c4Sopenharmony_ci	passing a null pointer in the parameter
172da0c48c4Sopenharmony_ci	<parameter>data</parameter>.  To get the next data buffer the
173da0c48c4Sopenharmony_ci	previously returned value must be passed in the
174da0c48c4Sopenharmony_ci	<parameter>data</parameter> parameter.  If there are no more
175da0c48c4Sopenharmony_ci	buffer left in the list a null pointer is returned.</simpara>
176da0c48c4Sopenharmony_ci
177da0c48c4Sopenharmony_ci	<simpara>If the <parameter>data</parameter> parameter is not a
178da0c48c4Sopenharmony_ci	null pointer it must be a descriptor for a buffer
179da0c48c4Sopenharmony_ci	associated with the section <parameter>scn</parameter>.  If
180da0c48c4Sopenharmony_ci	this is not the case a null pointer is returned.  To
181da0c48c4Sopenharmony_ci	facilitate error handling <function>elf_getdata</function>
182da0c48c4Sopenharmony_ci	also returns a null pointer if the <parameter>scn</parameter>
183da0c48c4Sopenharmony_ci	parameter is a null pointer.</simpara>
184da0c48c4Sopenharmony_ci      </refsect1>
185da0c48c4Sopenharmony_ci    </refentry>
186da0c48c4Sopenharmony_ci
187da0c48c4Sopenharmony_ci    <refentry>
188da0c48c4Sopenharmony_ci      <refnamediv>
189da0c48c4Sopenharmony_ci	<refname id="elfUupdate.refname">elf_update</refname>
190da0c48c4Sopenharmony_ci	<refpurpose>update an ELF descriptor</refpurpose>
191da0c48c4Sopenharmony_ci      </refnamediv>
192da0c48c4Sopenharmony_ci
193da0c48c4Sopenharmony_ci      <refsynopsisdiv>
194da0c48c4Sopenharmony_ci	<funcsynopsis>
195da0c48c4Sopenharmony_ci	  <funcsynopsisinfo>
196da0c48c4Sopenharmony_ci#include &lt;libelf.h&gt;
197da0c48c4Sopenharmony_ci</funcsynopsisinfo>
198da0c48c4Sopenharmony_ci	  <funcprototype>
199da0c48c4Sopenharmony_ci	    <funcdef>off_t <function>elf_update</function></funcdef>
200da0c48c4Sopenharmony_ci	    <paramdef>Elf *<parameter>elf</parameter></paramdef>
201da0c48c4Sopenharmony_ci	    <paramdef>Elf_Cmd <parameter>cmd</parameter></paramdef>
202da0c48c4Sopenharmony_ci	  </funcprototype>
203da0c48c4Sopenharmony_ci	</funcsynopsis>
204da0c48c4Sopenharmony_ci      </refsynopsisdiv>
205da0c48c4Sopenharmony_ci
206da0c48c4Sopenharmony_ci      <refsect1>
207da0c48c4Sopenharmony_ci	<title>Description</title>
208da0c48c4Sopenharmony_ci
209da0c48c4Sopenharmony_ci	<simpara>The user is responsible for filling in the following
210da0c48c4Sopenharmony_ci	fields in the named data structures:</simpara>
211da0c48c4Sopenharmony_ci
212da0c48c4Sopenharmony_ci	<table>
213da0c48c4Sopenharmony_ci	  <title>Fields not set by <function>elf_update</function></title>
214da0c48c4Sopenharmony_ci	  <tgroup cols="3">
215da0c48c4Sopenharmony_ci            <colspec colwidth="90pt">
216da0c48c4Sopenharmony_ci            <colspec colwidth="110pt">
217da0c48c4Sopenharmony_ci	    <thead>
218da0c48c4Sopenharmony_ci	      <row>
219da0c48c4Sopenharmony_ci		<entry>Data Structure</entry>
220da0c48c4Sopenharmony_ci		<entry>Member</entry>
221da0c48c4Sopenharmony_ci		<entry>Exception</entry>
222da0c48c4Sopenharmony_ci	      </row>
223da0c48c4Sopenharmony_ci	    </thead>
224da0c48c4Sopenharmony_ci	    <tbody>
225da0c48c4Sopenharmony_ci	      <row>
226da0c48c4Sopenharmony_ci		<entry morerows="8"><type>Elfxx_Ehdr</type></entry>
227da0c48c4Sopenharmony_ci		<entry>e_ident[EI_DATA]</entry>
228da0c48c4Sopenharmony_ci		<entry>see below</entry>
229da0c48c4Sopenharmony_ci	      </row>
230da0c48c4Sopenharmony_ci	      <row>
231da0c48c4Sopenharmony_ci		<entry></entry>
232da0c48c4Sopenharmony_ci		<entry>e_type</entry>
233da0c48c4Sopenharmony_ci		<!-- <entry morerows="1"></entry> -->
234da0c48c4Sopenharmony_ci		<entry></entry>
235da0c48c4Sopenharmony_ci	      </row>
236da0c48c4Sopenharmony_ci	      <row>
237da0c48c4Sopenharmony_ci		<entry></entry>
238da0c48c4Sopenharmony_ci		<entry>e_machine</entry>
239da0c48c4Sopenharmony_ci		<entry></entry>
240da0c48c4Sopenharmony_ci	      </row>
241da0c48c4Sopenharmony_ci	      <row>
242da0c48c4Sopenharmony_ci		<entry></entry>
243da0c48c4Sopenharmony_ci		<entry>e_version</entry>
244da0c48c4Sopenharmony_ci		<entry>see below</entry>
245da0c48c4Sopenharmony_ci	      </row>
246da0c48c4Sopenharmony_ci	      <row>
247da0c48c4Sopenharmony_ci		<entry></entry>
248da0c48c4Sopenharmony_ci		<entry>e_entry</entry>
249da0c48c4Sopenharmony_ci		<entry></entry>
250da0c48c4Sopenharmony_ci	      </row>
251da0c48c4Sopenharmony_ci	      <row>
252da0c48c4Sopenharmony_ci		<entry></entry>
253da0c48c4Sopenharmony_ci		<entry>e_phoff</entry>
254da0c48c4Sopenharmony_ci		<entry>if <symbol>ELF_F_LAYOUT</symbol> is used</entry>
255da0c48c4Sopenharmony_ci	      </row>
256da0c48c4Sopenharmony_ci	      <row>
257da0c48c4Sopenharmony_ci		<entry></entry>
258da0c48c4Sopenharmony_ci		<entry>e_shoff</entry>
259da0c48c4Sopenharmony_ci		<entry>if <symbol>ELF_F_LAYOUT</symbol> is used</entry>
260da0c48c4Sopenharmony_ci	      </row>
261da0c48c4Sopenharmony_ci	      <row>
262da0c48c4Sopenharmony_ci		<entry></entry>
263da0c48c4Sopenharmony_ci		<entry>e_flags</entry>
264da0c48c4Sopenharmony_ci		<entry></entry>
265da0c48c4Sopenharmony_ci	      </row>
266da0c48c4Sopenharmony_ci	      <row>
267da0c48c4Sopenharmony_ci		<entry></entry>
268da0c48c4Sopenharmony_ci		<entry>e_shstrndx</entry>
269da0c48c4Sopenharmony_ci		<entry></entry>
270da0c48c4Sopenharmony_ci	      </row>
271da0c48c4Sopenharmony_ci	      <row>
272da0c48c4Sopenharmony_ci		<entry morerows="7">Elfxx_Phdr</entry>
273da0c48c4Sopenharmony_ci		<entry>p_type</entry>
274da0c48c4Sopenharmony_ci		<entry morerows="7"></entry>
275da0c48c4Sopenharmony_ci	      </row>
276da0c48c4Sopenharmony_ci	      <row>
277da0c48c4Sopenharmony_ci		<entry></entry>
278da0c48c4Sopenharmony_ci		<entry>p_offset</entry>
279da0c48c4Sopenharmony_ci		<entry></entry>
280da0c48c4Sopenharmony_ci	      </row>
281da0c48c4Sopenharmony_ci	      <row>
282da0c48c4Sopenharmony_ci		<entry></entry>
283da0c48c4Sopenharmony_ci		<entry>p_vaddr</entry>
284da0c48c4Sopenharmony_ci		<entry></entry>
285da0c48c4Sopenharmony_ci	      </row>
286da0c48c4Sopenharmony_ci	      <row>
287da0c48c4Sopenharmony_ci		<entry></entry>
288da0c48c4Sopenharmony_ci		<entry>p_paddr</entry>
289da0c48c4Sopenharmony_ci		<entry></entry>
290da0c48c4Sopenharmony_ci	      </row>
291da0c48c4Sopenharmony_ci	      <row>
292da0c48c4Sopenharmony_ci		<entry></entry>
293da0c48c4Sopenharmony_ci		<entry>p_filesz</entry>
294da0c48c4Sopenharmony_ci		<entry></entry>
295da0c48c4Sopenharmony_ci	      </row>
296da0c48c4Sopenharmony_ci	      <row>
297da0c48c4Sopenharmony_ci		<entry></entry>
298da0c48c4Sopenharmony_ci		<entry>p_memsz</entry>
299da0c48c4Sopenharmony_ci		<entry></entry>
300da0c48c4Sopenharmony_ci	      </row>
301da0c48c4Sopenharmony_ci	      <row>
302da0c48c4Sopenharmony_ci		<entry></entry>
303da0c48c4Sopenharmony_ci		<entry>p_flags</entry>
304da0c48c4Sopenharmony_ci		<entry></entry>
305da0c48c4Sopenharmony_ci	      </row>
306da0c48c4Sopenharmony_ci	      <row>
307da0c48c4Sopenharmony_ci		<entry></entry>
308da0c48c4Sopenharmony_ci		<entry>p_align</entry>
309da0c48c4Sopenharmony_ci		<entry></entry>
310da0c48c4Sopenharmony_ci	      </row>
311da0c48c4Sopenharmony_ci
312da0c48c4Sopenharmony_ci	      <row>
313da0c48c4Sopenharmony_ci		<entry morerows="9">Elfxx_Shdr</entry>
314da0c48c4Sopenharmony_ci		<entry>sh_name</entry>
315da0c48c4Sopenharmony_ci		<entry morerows="3"></entry>
316da0c48c4Sopenharmony_ci	      </row>
317da0c48c4Sopenharmony_ci	      <row>
318da0c48c4Sopenharmony_ci		<entry></entry>
319da0c48c4Sopenharmony_ci		<entry>sh_type</entry>
320da0c48c4Sopenharmony_ci		<entry></entry>
321da0c48c4Sopenharmony_ci	      </row>
322da0c48c4Sopenharmony_ci	      <row>
323da0c48c4Sopenharmony_ci		<entry></entry>
324da0c48c4Sopenharmony_ci		<entry>sh_flags</entry>
325da0c48c4Sopenharmony_ci		<entry></entry>
326da0c48c4Sopenharmony_ci	      </row>
327da0c48c4Sopenharmony_ci	      <row>
328da0c48c4Sopenharmony_ci		<entry></entry>
329da0c48c4Sopenharmony_ci		<entry>sh_addr</entry>
330da0c48c4Sopenharmony_ci		<entry></entry>
331da0c48c4Sopenharmony_ci	      </row>
332da0c48c4Sopenharmony_ci	      <row>
333da0c48c4Sopenharmony_ci		<entry></entry>
334da0c48c4Sopenharmony_ci		<entry>sh_offset</entry>
335da0c48c4Sopenharmony_ci		<entry>if <symbol>ELF_F_LAYOUT</symbol> is used</entry>
336da0c48c4Sopenharmony_ci	      </row>
337da0c48c4Sopenharmony_ci	      <row>
338da0c48c4Sopenharmony_ci		<entry></entry>
339da0c48c4Sopenharmony_ci		<entry>sh_size</entry>
340da0c48c4Sopenharmony_ci		<entry>if <symbol>ELF_F_LAYOUT</symbol> is used</entry>
341da0c48c4Sopenharmony_ci	      </row>
342da0c48c4Sopenharmony_ci	      <row>
343da0c48c4Sopenharmony_ci		<entry></entry>
344da0c48c4Sopenharmony_ci		<entry>sh_link</entry>
345da0c48c4Sopenharmony_ci		<!-- <entry morerows="1"></entry> -->
346da0c48c4Sopenharmony_ci		<entry></entry>
347da0c48c4Sopenharmony_ci	      </row>
348da0c48c4Sopenharmony_ci	      <row>
349da0c48c4Sopenharmony_ci		<entry></entry>
350da0c48c4Sopenharmony_ci		<entry>sh_info</entry>
351da0c48c4Sopenharmony_ci		<entry></entry>
352da0c48c4Sopenharmony_ci	      </row>
353da0c48c4Sopenharmony_ci	      <row>
354da0c48c4Sopenharmony_ci		<entry></entry>
355da0c48c4Sopenharmony_ci		<entry>sh_addralign</entry>
356da0c48c4Sopenharmony_ci		<entry>if <symbol>ELF_F_LAYOUT</symbol> is used</entry>
357da0c48c4Sopenharmony_ci	      </row>
358da0c48c4Sopenharmony_ci	      <row>
359da0c48c4Sopenharmony_ci		<entry></entry>
360da0c48c4Sopenharmony_ci		<entry>sh_entsize</entry>
361da0c48c4Sopenharmony_ci		<entry></entry>
362da0c48c4Sopenharmony_ci	      </row>
363da0c48c4Sopenharmony_ci
364da0c48c4Sopenharmony_ci	      <row>
365da0c48c4Sopenharmony_ci		<entry morerows="5">Elf_Data</entry>
366da0c48c4Sopenharmony_ci		<entry>d_buf</entry>
367da0c48c4Sopenharmony_ci		<entry morerows="2"></entry>
368da0c48c4Sopenharmony_ci	      </row>
369da0c48c4Sopenharmony_ci	      <row>
370da0c48c4Sopenharmony_ci		<entry></entry>
371da0c48c4Sopenharmony_ci		<entry>d_type</entry>
372da0c48c4Sopenharmony_ci		<entry></entry>
373da0c48c4Sopenharmony_ci	      </row>
374da0c48c4Sopenharmony_ci	      <row>
375da0c48c4Sopenharmony_ci		<entry></entry>
376da0c48c4Sopenharmony_ci		<entry>d_size</entry>
377da0c48c4Sopenharmony_ci		<entry></entry>
378da0c48c4Sopenharmony_ci	      </row>
379da0c48c4Sopenharmony_ci	      <row>
380da0c48c4Sopenharmony_ci		<entry></entry>
381da0c48c4Sopenharmony_ci		<entry>d_off</entry>
382da0c48c4Sopenharmony_ci		<entry>if <symbol>ELF_F_LAYOUT</symbol> is used</entry>
383da0c48c4Sopenharmony_ci	      </row>
384da0c48c4Sopenharmony_ci	      <row>
385da0c48c4Sopenharmony_ci		<entry></entry>
386da0c48c4Sopenharmony_ci		<entry>d_align</entry>
387da0c48c4Sopenharmony_ci		<!-- <entry morerows="1"></entry> -->
388da0c48c4Sopenharmony_ci		<entry></entry>
389da0c48c4Sopenharmony_ci	      </row>
390da0c48c4Sopenharmony_ci	      <row>
391da0c48c4Sopenharmony_ci		<entry></entry>
392da0c48c4Sopenharmony_ci		<entry>d_version</entry>
393da0c48c4Sopenharmony_ci		<entry></entry>
394da0c48c4Sopenharmony_ci	      </row>
395da0c48c4Sopenharmony_ci	    </tbody>
396da0c48c4Sopenharmony_ci	  </tgroup>
397da0c48c4Sopenharmony_ci	</table>
398da0c48c4Sopenharmony_ci
399da0c48c4Sopenharmony_ci	<simpara>Two fields of the ELF header are handled in a special
400da0c48c4Sopenharmony_ci	way:</simpara>
401da0c48c4Sopenharmony_ci
402da0c48c4Sopenharmony_ci	<variablelist>
403da0c48c4Sopenharmony_ci	  <varlistentry>
404da0c48c4Sopenharmony_ci	    <term>e_version</term>
405da0c48c4Sopenharmony_ci	    <listitem>
406da0c48c4Sopenharmony_ci	      <simpara>The user can set this field to the vvalue for
407da0c48c4Sopenharmony_ci	      the version to be used.  It is an error if the library
408da0c48c4Sopenharmony_ci	      cannot handle this version.  If the field contains the
409da0c48c4Sopenharmony_ci	      value <symbol>EV_NONE</symbol> the library will fill in
410da0c48c4Sopenharmony_ci	      its own internal version.</simpara>
411da0c48c4Sopenharmony_ci	    </listitem>
412da0c48c4Sopenharmony_ci	  </varlistentry>
413da0c48c4Sopenharmony_ci
414da0c48c4Sopenharmony_ci	  <varlistentry>
415da0c48c4Sopenharmony_ci	    <term>e_ident[EI_DATA]</term>
416da0c48c4Sopenharmony_ci	    <listitem>
417da0c48c4Sopenharmony_ci	      <simpara>The user should fill in the byte ordering for
418da0c48c4Sopenharmony_ci	      the file.  If the value of the field is
419da0c48c4Sopenharmony_ci	      <symbol>ELFDATANONE</symbol> the library replaces it
420da0c48c4Sopenharmony_ci	      with the native byte ordering for the machine.</simpara>
421da0c48c4Sopenharmony_ci	    </listitem>
422da0c48c4Sopenharmony_ci	  </varlistentry>
423da0c48c4Sopenharmony_ci	</variablelist>
424da0c48c4Sopenharmony_ci      </refsect1>
425da0c48c4Sopenharmony_ci    </refentry>
426da0c48c4Sopenharmony_ci  </chapter>
427da0c48c4Sopenharmony_ci
428da0c48c4Sopenharmony_ci  <chapter>
429da0c48c4Sopenharmony_ci    <title><filename>libelf</filename> Internals</title>
430da0c48c4Sopenharmony_ci
431da0c48c4Sopenharmony_ci    <simpara>Since the binary format handling tools need constant
432da0c48c4Sopenharmony_ci    attention since there are always new machines and variants
433da0c48c4Sopenharmony_ci    therefore coming out it is important to have the implementation
434da0c48c4Sopenharmony_ci    well documented.  Only this way extensions can be made in the
435da0c48c4Sopenharmony_ci    right places and the mistakes of the past avoided.</simpara>
436da0c48c4Sopenharmony_ci  </chapter>
437da0c48c4Sopenharmony_ci</book>
438da0c48c4Sopenharmony_ci<!-- Keep this comment at the end of the file
439da0c48c4Sopenharmony_ciLocal variables:
440da0c48c4Sopenharmony_cimode: sgml
441da0c48c4Sopenharmony_cisgml-omitag:nil
442da0c48c4Sopenharmony_cisgml-shorttag:t
443da0c48c4Sopenharmony_ciEnd:
444da0c48c4Sopenharmony_ci-->
445