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