.\" Copyright (c) 2011 Kai Wang .\" 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 THE AUTHOR AND CONTRIBUTORS ``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 THE AUTHOR OR CONTRIBUTORS 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: dwarf_get_section_bytes.3 2071 2011-10-27 03:20:00Z jkoshy $ .\" .Dd August 26, 2011 .Os .Dt DWARF_GET_SECTION_BYTES 3 .Sh NAME .Nm dwarf_get_section_bytes .Nd retrieve ELF section byte streams .Sh LIBRARY .Lb libdwarf .Sh SYNOPSIS .In libdwarf.h .Ft Dwarf_Ptr .Fo dwarf_get_section_bytes .Fa "Dwarf_P_Debug dbg" .Fa "Dwarf_Signed dwarf_section" .Fa "Dwarf_Signed *elf_section_index" .Fa "Dwarf_Unsigned *length" .Fa "Dwarf_Error *err" .Fc .Sh DESCRIPTION Function .Fn dwarf_get_section_bytes returns the ELF section byte streams generated by a prior call to function .Xr dwarf_transform_to_disk_form 3 . .Pp Each call to function .Fn dwarf_get_section_bytes will return the byte stream for one ELF section. The first call to this function will always return the first ELF section, and the subsequent calls will return the rest of sections in the order when they were generated, until the last one. The total number of sections generated is returned by the function .Xr dwarf_transform_to_disk_form 3 . .Pp Argument .Ar dbg should reference a DWARF producer instance allocated using the functions .Xr dwarf_producer_init 3 or .Xr dwarf_producer_init_b 3 . .Pp Argument .Ar dwarf_section is currently ignored. .Pp Argument .Ar elf_section_index should point to a location which will be set to the section index value of the returned ELF section. .Pp Argument .Ar length should point to a location which will hold the length in bytes of the returned ELF section. .Pp If argument .Ar err is not NULL, it will be used to store error information in case of an error. .Ss Memory Management The memory areas used for the returned ELF section byte streams should be freed using the function .Fn dwarf_producer_finish . .Sh RETURN VALUES On success, function .Fn dwarf_get_section_bytes returns a pointer to a ELF section byte stream. In case of an error, function .Fn dwarf_get_section_bytes will return NULL and set the argument .Ar err . .Sh ERRORS Function .Fn dwarf_get_section_bytes can fail with: .Bl -tag -width ".Bq Er DW_DLE_NO_ENTRY" .It Bq Er DW_DLE_ARGUMENT One of the arguments .Ar dbg , .Ar elf_section_index , or .Ar length was NULL. .It Bq Er DW_DLE_NO_ENTRY There were no more ELF sections to retrieve, or the function was called before a call to .Xr dwarf_transform_to_disk_form 3 . .El .Sh EXAMPLES To generate and retrieve ELF section byte streams, use: .Bd -literal -offset indent Dwarf_P_Debug dbg; Dwarf_Signed count, i, sec_index; Dwarf_Unsigned len; Dwarf_Ptr bytes; Dwarf_Error de; /* ... Assume that `dbg' refers to a DWARF producer instance, * and that application code has added DWARF debugging * information to the producer instance. ... */ if ((count = dwarf_transform_to_disk_form(dbg, &de)) == DW_DLV_NOCOUNT) { warnx("dwarf_transform_to_disk_form failed: %s", dwarf_errmsg(-1)); return; } /* Retrieve section data. */ for (i = 0; i < count; i++) { bytes = dwarf_get_section_bytes(dbg, i, &sec_index, &len, &de); if (bytes == NULL) { warnx("dwarf_get_section_bytes failed: %s", dwarf_errmsg(-1)); continue; } /* ... use the returned byte stream ... */ } /* Release resources. */ dwarf_producer_finish(dbg, &de); .Ed .Sh SEE ALSO .Xr dwarf 3 , .Xr dwarf_reset_section_bytes 3 , .Xr dwarf_producer_finish 3 , .Xr dwarf_producer_init 3 , .Xr dwarf_producer_init_b 3 , .Xr dwarf_transform_to_disk_form 3