225 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			225 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\" Copyright (c) 2006,2008,2010-2011 Joseph Koshy.  All rights reserved.
 | |
| .\"
 | |
| .\" Redistribution and use in source and binary forms, with or without
 | |
| .\" modification, are permitted provided that the following conditions
 | |
| .\" are met:
 | |
| .\" 1. Redistributions of source code must retain the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer.
 | |
| .\" 2. Redistributions in binary form must reproduce the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer in the
 | |
| .\"    documentation and/or other materials provided with the distribution.
 | |
| .\"
 | |
| .\" This software is provided by Joseph Koshy ``as is'' and
 | |
| .\" any express or implied warranties, including, but not limited to, the
 | |
| .\" implied warranties of merchantability and fitness for a particular purpose
 | |
| .\" are disclaimed.  in no event shall Joseph Koshy be liable
 | |
| .\" for any direct, indirect, incidental, special, exemplary, or consequential
 | |
| .\" damages (including, but not limited to, procurement of substitute goods
 | |
| .\" or services; loss of use, data, or profits; or business interruption)
 | |
| .\" however caused and on any theory of liability, whether in contract, strict
 | |
| .\" liability, or tort (including negligence or otherwise) arising in any way
 | |
| .\" out of the use of this software, even if advised of the possibility of
 | |
| .\" such damage.
 | |
| .\"
 | |
| .\" $Id$
 | |
| .\"
 | |
| .Dd January 26, 2011
 | |
| .Os
 | |
| .Dt ELF_GETDATA 3
 | |
| .Sh NAME
 | |
| .Nm elf_getdata ,
 | |
| .Nm elf_newdata ,
 | |
| .Nm elf_rawdata
 | |
| .Nd iterate through or allocate section data
 | |
| .Sh LIBRARY
 | |
| .Lb libelf
 | |
| .Sh SYNOPSIS
 | |
| .In libelf.h
 | |
| .Ft "Elf_Data *"
 | |
| .Fn elf_getdata "Elf_Scn *scn" "Elf_Data *data"
 | |
| .Ft "Elf_Data *"
 | |
| .Fn elf_newdata "Elf_Scn *scn"
 | |
| .Ft "Elf_Data *"
 | |
| .Fn elf_rawdata "Elf_Scn *scn" "Elf_Data *data"
 | |
| .Sh DESCRIPTION
 | |
| These functions are used to access and manipulate data descriptors
 | |
| associated with section descriptors.
 | |
| Data descriptors used by the ELF library are described in
 | |
| .Xr elf 3 .
 | |
| .Pp
 | |
| Function
 | |
| .Fn elf_getdata
 | |
| will return the next data descriptor associated with section descriptor
 | |
| .Ar scn .
 | |
| The returned data descriptor will be setup to contain translated data.
 | |
| Argument
 | |
| .Ar data
 | |
| may be NULL, in which case the function returns the first data descriptor
 | |
| associated with section
 | |
| .Ar scn .
 | |
| If argument
 | |
| .Ar data
 | |
| is not NULL, it must be a pointer to a data descriptor associated with
 | |
| section descriptor
 | |
| .Ar scn ,
 | |
| and function
 | |
| .Fn elf_getdata
 | |
| will return a pointer to the next data descriptor for the section,
 | |
| or NULL when the end of the section's descriptor list is reached.
 | |
| .Pp
 | |
| Function
 | |
| .Fn elf_newdata
 | |
| will allocate a new data descriptor and append it to the list of data
 | |
| descriptors associated with section descriptor
 | |
| .Ar scn .
 | |
| The new data descriptor will be initialized as follows:
 | |
| .Bl -tag -width "d_version" -compact -offset indent
 | |
| .It Va d_align
 | |
| Set to 1.
 | |
| .It Va d_buf
 | |
| Initialized to NULL.
 | |
| .It Va d_off
 | |
| Set to (off_t) -1.
 | |
| This field is under application control if the
 | |
| .Dv ELF_F_LAYOUT
 | |
| flag was set on the ELF descriptor.
 | |
| .It Va d_size
 | |
| Set to zero.
 | |
| .It Va d_type
 | |
| Initialized to
 | |
| .Dv ELF_T_BYTE .
 | |
| .It Va d_version
 | |
| Set to the current working version of the library, as set by
 | |
| .Xr elf_version 3 .
 | |
| .El
 | |
| The application must set these values as appropriate before
 | |
| calling
 | |
| .Xr elf_update 3 .
 | |
| Section
 | |
| .Ar scn
 | |
| must be associated with an ELF file opened for writing.
 | |
| If the application has not requested full control of layout by
 | |
| setting the
 | |
| .Dv ELF_F_LAYOUT
 | |
| flag on descriptor
 | |
| .Ar elf ,
 | |
| then the data referenced by the returned descriptor will be positioned
 | |
| after the existing content of the section, honoring the file alignment
 | |
| specified in member
 | |
| .Va d_align .
 | |
| On successful completion of a call to
 | |
| .Fn elf_newdata ,
 | |
| the ELF library will mark the section
 | |
| .Ar scn
 | |
| as
 | |
| .Dq dirty .
 | |
| .Pp
 | |
| Function
 | |
| .Fn elf_rawdata
 | |
| is used to step through the data descriptors associated with
 | |
| section
 | |
| .Ar scn .
 | |
| In contrast to function
 | |
| .Fn elf_getdata ,
 | |
| this function returns untranslated data.
 | |
| If argument
 | |
| .Ar data
 | |
| is NULL, the first data descriptor associated with section
 | |
| .Ar scn
 | |
| is returned.
 | |
| If argument
 | |
| .Ar data
 | |
| is not NULL, is must be a data descriptor associated with
 | |
| section
 | |
| .Ar scn ,
 | |
| and function
 | |
| .Fn elf_rawdata
 | |
| will return the next data descriptor in the list, or NULL
 | |
| if no further descriptors are present.
 | |
| Function
 | |
| .Fn elf_rawdata
 | |
| always returns
 | |
| .Vt Elf_Data
 | |
| structures of type
 | |
| .Dv ELF_T_BYTE .
 | |
| .Ss Special handling of zero-sized and SHT_NOBITS sections
 | |
| For sections of type
 | |
| .Dv SHT_NOBITS,
 | |
| and for zero-sized sections,
 | |
| the functions
 | |
| .Fn elf_getdata
 | |
| and
 | |
| .Fn elf_rawdata
 | |
| return a pointer to a valid
 | |
| .Vt Elf_Data
 | |
| structure that has its
 | |
| .Va d_buf
 | |
| member set to NULL and its
 | |
| .Va d_size
 | |
| member set to the size of the section.
 | |
| .Pp
 | |
| If an application wishes to create a section of type
 | |
| .Dv SHT_NOBITS ,
 | |
| it should add a data buffer to the section using function
 | |
| .Fn elf_newdata .
 | |
| It should then set the
 | |
| .Va d_buf
 | |
| and
 | |
| .Va d_size
 | |
| members of the returned
 | |
| .Vt Elf_Data
 | |
| structure to NULL and the desired size of the section respectively.
 | |
| .Sh RETURN VALUES
 | |
| These functions return a valid pointer to a data descriptor if successful, or
 | |
| NULL if an error occurs.
 | |
| .Sh ERRORS
 | |
| These functions may fail with the following errors:
 | |
| .Bl -tag -width "[ELF_E_RESOURCE]" 
 | |
| .It Bq Er ELF_E_ARGUMENT
 | |
| Either of arguments
 | |
| .Ar scn
 | |
| or
 | |
| .Ar data
 | |
| was NULL.
 | |
| .It Bq Er ELF_E_ARGUMENT
 | |
| The data descriptor referenced by argument
 | |
| .Ar data
 | |
| is not associated with section descriptor
 | |
| .Ar scn .
 | |
| .It Bq Er ELF_E_ARGUMENT
 | |
| The section denoted by argument
 | |
| .Ar scn
 | |
| had no data associated with it.
 | |
| .It Bq Er ELF_E_DATA
 | |
| Retrieval of data from the underlying object failed.
 | |
| .It Bq Er ELF_E_RESOURCE
 | |
| An out of memory condition was detected.
 | |
| .It Bq Er ELF_E_SECTION
 | |
| The section type associated with section
 | |
| .Ar scn
 | |
| is not recognized by the library.
 | |
| .It Bq Er ELF_E_SECTION
 | |
| The size of the section
 | |
| .Ar scn
 | |
| is not a multiple of the file size for its section type.
 | |
| .It Bq Er ELF_E_SECTION
 | |
| The file offset for section
 | |
| .Ar scn
 | |
| is incorrect.
 | |
| .It Bq Er ELF_E_UNIMPL
 | |
| The section type associated with section
 | |
| .Ar scn
 | |
| is currently unsupported by the library.
 | |
| .El
 | |
| .Sh SEE ALSO
 | |
| .Xr elf 3 ,
 | |
| .Xr elf_flagdata 3 ,
 | |
| .Xr elf_flagscn 3 ,
 | |
| .Xr elf_getscn 3 ,
 | |
| .Xr elf_getshdr 3 ,
 | |
| .Xr elf_newscn 3 ,
 | |
| .Xr elf_rawfile 3 ,
 | |
| .Xr elf_update 3 ,
 | |
| .Xr elf_version 3 ,
 | |
| .Xr gelf 3
 | 
