1 .\" $NetBSD: dwarf_get_section_bytes.3,v 1.2 2014/03/09 16:58:04 christos Exp $
3 .\" Copyright (c) 2011 Kai Wang
4 .\" All rights reserved.
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
9 .\" 1. Redistributions of source code must retain the above copyright
10 .\" notice, this list of conditions and the following disclaimer.
11 .\" 2. Redistributions in binary form must reproduce the above copyright
12 .\" notice, this list of conditions and the following disclaimer in the
13 .\" documentation and/or other materials provided with the distribution.
15 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 .\" Id: dwarf_get_section_bytes.3 2071 2011-10-27 03:20:00Z jkoshy
31 .Dt DWARF_GET_SECTION_BYTES 3
33 .Nm dwarf_get_section_bytes
34 .Nd retrieve ELF section byte streams
40 .Fo dwarf_get_section_bytes
41 .Fa "Dwarf_P_Debug dbg"
42 .Fa "Dwarf_Signed dwarf_section"
43 .Fa "Dwarf_Signed *elf_section_index"
44 .Fa "Dwarf_Unsigned *length"
45 .Fa "Dwarf_Error *err"
49 .Fn dwarf_get_section_bytes
50 returns the ELF section byte streams generated by a prior call
52 .Xr dwarf_transform_to_disk_form 3 .
55 .Fn dwarf_get_section_bytes
56 will return the byte stream for one ELF section.
57 The first call to this function will always return the first ELF
58 section, and the subsequent calls will return the rest of sections
59 in the order when they were generated, until the last one.
60 The total number of sections generated is returned by the function
61 .Xr dwarf_transform_to_disk_form 3 .
65 should reference a DWARF producer instance allocated using the
67 .Xr dwarf_producer_init 3
69 .Xr dwarf_producer_init_b 3 .
77 should point to a location which will be set to the section index value
78 of the returned ELF section.
82 should point to a location which will hold the length in bytes of the
87 is not NULL, it will be used to store error information in case of an
90 The memory areas used for the returned ELF section byte streams should
91 be freed using the function
92 .Fn dwarf_producer_finish .
95 .Fn dwarf_get_section_bytes
96 returns a pointer to a ELF section byte stream.
97 In case of an error, function
98 .Fn dwarf_get_section_bytes
99 will return NULL and set the argument
103 .Fn dwarf_get_section_bytes
105 .Bl -tag -width ".Bq Er DW_DLE_NO_ENTRY"
106 .It Bq Er DW_DLE_ARGUMENT
109 .Ar elf_section_index ,
113 .It Bq Er DW_DLE_NO_ENTRY
114 There were no more ELF sections to retrieve, or the function was
115 called before a call to
116 .Xr dwarf_transform_to_disk_form 3 .
119 To generate and retrieve ELF section byte streams, use:
120 .Bd -literal -offset indent
122 Dwarf_Signed count, i, sec_index;
127 /* ... Assume that `dbg' refers to a DWARF producer instance,
128 * and that application code has added DWARF debugging
129 * information to the producer instance. ...
131 if ((count = dwarf_transform_to_disk_form(dbg, &de)) ==
133 warnx("dwarf_transform_to_disk_form failed: %s",
138 /* Retrieve section data. */
139 for (i = 0; i < count; i++) {
140 bytes = dwarf_get_section_bytes(dbg, i, &sec_index, &len,
143 warnx("dwarf_get_section_bytes failed: %s",
147 /* ... use the returned byte stream ... */
150 /* Release resources. */
151 dwarf_producer_finish(dbg, &de);
155 .Xr dwarf_reset_section_bytes 3 ,
156 .Xr dwarf_producer_finish 3 ,
157 .Xr dwarf_producer_init 3 ,
158 .Xr dwarf_producer_init_b 3 ,
159 .Xr dwarf_transform_to_disk_form 3