1.\" Copyright (c) 2006,2008,2010-2011 Joseph Koshy. All rights reserved. 2.\" 3.\" Redistribution and use in source and binary forms, with or without 4.\" modification, are permitted provided that the following conditions 5.\" are met: 6.\" 1. Redistributions of source code must retain the above copyright 7.\" notice, this list of conditions and the following disclaimer. 8.\" 2. Redistributions in binary form must reproduce the above copyright 9.\" notice, this list of conditions and the following disclaimer in the 10.\" documentation and/or other materials provided with the distribution. 11.\" 12.\" This software is provided by Joseph Koshy ``as is'' and 13.\" any express or implied warranties, including, but not limited to, the 14.\" implied warranties of merchantability and fitness for a particular purpose 15.\" are disclaimed. in no event shall Joseph Koshy be liable 16.\" for any direct, indirect, incidental, special, exemplary, or consequential 17.\" damages (including, but not limited to, procurement of substitute goods 18.\" or services; loss of use, data, or profits; or business interruption) 19.\" however caused and on any theory of liability, whether in contract, strict 20.\" liability, or tort (including negligence or otherwise) arising in any way 21.\" out of the use of this software, even if advised of the possibility of 22.\" such damage. 23.\" 24.\" $FreeBSD$ 25.\" 26.Dd February 18, 2013 27.Dt ELF_GETDATA 3 28.Os 29.Sh NAME 30.Nm elf_getdata , 31.Nm elf_newdata , 32.Nm elf_rawdata 33.Nd iterate through or allocate section data 34.Sh LIBRARY 35.Lb libelf 36.Sh SYNOPSIS 37.In libelf.h 38.Ft "Elf_Data *" 39.Fn elf_getdata "Elf_Scn *scn" "Elf_Data *data" 40.Ft "Elf_Data *" 41.Fn elf_newdata "Elf_Scn *scn" 42.Ft "Elf_Data *" 43.Fn elf_rawdata "Elf_Scn *scn" "Elf_Data *data" 44.Sh DESCRIPTION 45These functions are used to access and manipulate data descriptors 46associated with section descriptors. 47Data descriptors used by the ELF library are described in 48.Xr elf 3 . 49.Pp 50Function 51.Fn elf_getdata 52will return the next data descriptor associated with section descriptor 53.Ar scn . 54The returned data descriptor will be setup to contain translated data. 55Argument 56.Ar data 57may be NULL, in which case the function returns the first data descriptor 58associated with section 59.Ar scn . 60If argument 61.Ar data 62is not NULL, it must be a pointer to a data descriptor associated with 63section descriptor 64.Ar scn , 65and function 66.Fn elf_getdata 67will return a pointer to the next data descriptor for the section, 68or NULL when the end of the section's descriptor list is reached. 69.Pp 70Function 71.Fn elf_newdata 72will allocate a new data descriptor and append it to the list of data 73descriptors associated with section descriptor 74.Ar scn . 75The new data descriptor will be initialized as follows: 76.Bl -tag -width "d_version" -compact -offset indent 77.It Va d_align 78Set to 1. 79.It Va d_buf 80Initialized to NULL. 81.It Va d_off 82Set to (off_t) -1. 83This field is under application control if the 84.Dv ELF_F_LAYOUT 85flag was set on the ELF descriptor. 86.It Va d_size 87Set to zero. 88.It Va d_type 89Initialized to 90.Dv ELF_T_BYTE . 91.It Va d_version 92Set to the current working version of the library, as set by 93.Xr elf_version 3 . 94.El 95The application must set these values as appropriate before 96calling 97.Xr elf_update 3 . 98Section 99.Ar scn 100must be associated with an ELF file opened for writing. 101If the application has not requested full control of layout by 102setting the 103.Dv ELF_F_LAYOUT 104flag on descriptor 105.Ar elf , 106then the data referenced by the returned descriptor will be positioned 107after the existing content of the section, honoring the file alignment 108specified in member 109.Va d_align . 110On successful completion of a call to 111.Fn elf_newdata , 112the ELF library will mark the section 113.Ar scn 114as 115.Dq dirty . 116.Pp 117Function 118.Fn elf_rawdata 119is used to step through the data descriptors associated with 120section 121.Ar scn . 122In contrast to function 123.Fn elf_getdata , 124this function returns untranslated data. 125If argument 126.Ar data 127is NULL, the first data descriptor associated with section 128.Ar scn 129is returned. 130If argument 131.Ar data 132is not NULL, is must be a data descriptor associated with 133section 134.Ar scn , 135and function 136.Fn elf_rawdata 137will return the next data descriptor in the list, or NULL 138if no further descriptors are present. 139Function 140.Fn elf_rawdata 141always returns 142.Vt Elf_Data 143structures of type 144.Dv ELF_T_BYTE . 145.Ss Special handling of zero-sized and SHT_NOBITS sections 146For sections of type 147.Dv SHT_NOBITS , 148and for zero-sized sections, 149the functions 150.Fn elf_getdata 151and 152.Fn elf_rawdata 153return a pointer to a valid 154.Vt Elf_Data 155structure that has its 156.Va d_buf 157member set to NULL and its 158.Va d_size 159member set to the size of the section. 160.Pp 161If an application wishes to create a section of type 162.Dv SHT_NOBITS , 163it should add a data buffer to the section using function 164.Fn elf_newdata . 165It should then set the 166.Va d_buf 167and 168.Va d_size 169members of the returned 170.Vt Elf_Data 171structure to NULL and the desired size of the section respectively. 172.Sh RETURN VALUES 173These functions return a valid pointer to a data descriptor if successful, or 174NULL if an error occurs. 175.Sh ERRORS 176These functions may fail with the following errors: 177.Bl -tag -width "[ELF_E_RESOURCE]" 178.It Bq Er ELF_E_ARGUMENT 179Arguments 180.Ar scn 181was NULL. 182.It Bq Er ELF_E_ARGUMENT 183Data descriptor 184.Ar data 185was not associated with section descriptor 186.Ar scn . 187.It Bq Er ELF_E_RESOURCE 188An out of memory condition was detected. 189.It Bq Er ELF_E_SECTION 190Section 191.Ar scn 192had type 193.Dv SHT_NULL . 194.It Bq Er ELF_E_SECTION 195The type of the section 196.Ar scn 197was not recognized by the library. 198.It Bq Er ELF_E_SECTION 199The size of the section 200.Ar scn 201is not a multiple of the file size for its section type. 202.It Bq Er ELF_E_SECTION 203The file offset for section 204.Ar scn 205is incorrect. 206.El 207.Sh SEE ALSO 208.Xr elf 3 , 209.Xr elf_flagdata 3 , 210.Xr elf_flagscn 3 , 211.Xr elf_getscn 3 , 212.Xr elf_getshdr 3 , 213.Xr elf_newscn 3 , 214.Xr elf_rawfile 3 , 215.Xr elf_update 3 , 216.Xr elf_version 3 , 217.Xr gelf 3 218