12de3b87aSKai Wang.\" Copyright (c) 2011 Kai Wang 22de3b87aSKai Wang.\" All rights reserved. 32de3b87aSKai Wang.\" 42de3b87aSKai Wang.\" Redistribution and use in source and binary forms, with or without 52de3b87aSKai Wang.\" modification, are permitted provided that the following conditions 62de3b87aSKai Wang.\" are met: 72de3b87aSKai Wang.\" 1. Redistributions of source code must retain the above copyright 82de3b87aSKai Wang.\" notice, this list of conditions and the following disclaimer. 92de3b87aSKai Wang.\" 2. Redistributions in binary form must reproduce the above copyright 102de3b87aSKai Wang.\" notice, this list of conditions and the following disclaimer in the 112de3b87aSKai Wang.\" documentation and/or other materials provided with the distribution. 122de3b87aSKai Wang.\" 132de3b87aSKai Wang.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 142de3b87aSKai Wang.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 152de3b87aSKai Wang.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 162de3b87aSKai Wang.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 172de3b87aSKai Wang.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 182de3b87aSKai Wang.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 192de3b87aSKai Wang.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 202de3b87aSKai Wang.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 212de3b87aSKai Wang.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 222de3b87aSKai Wang.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 232de3b87aSKai Wang.\" SUCH DAMAGE. 242de3b87aSKai Wang.\" 25*ae500c1fSEd Maste.\" $Id: dwarf_get_abbrev.3 3644 2018-10-15 19:55:01Z jkoshy $ 262de3b87aSKai Wang.\" 272de3b87aSKai Wang.Dd March 27, 2011 282de3b87aSKai Wang.Dt DWARF_GET_ABBREV 3 29*ae500c1fSEd Maste.Os 302de3b87aSKai Wang.Sh NAME 312de3b87aSKai Wang.Nm dwarf_get_abbrev 322de3b87aSKai Wang.Nd retrieve abbreviation information 332de3b87aSKai Wang.Sh LIBRARY 342de3b87aSKai Wang.Lb libdwarf 352de3b87aSKai Wang.Sh SYNOPSIS 362de3b87aSKai Wang.In libdwarf.h 372de3b87aSKai Wang.Ft int 382de3b87aSKai Wang.Fo dwarf_get_abbrev 392de3b87aSKai Wang.Fa "Dwarf_Debug dbg" 402de3b87aSKai Wang.Fa "Dwarf_Unsigned offset" 412de3b87aSKai Wang.Fa "Dwarf_Abbrev *ret_abbrev" 422de3b87aSKai Wang.Fa "Dwarf_Unsigned *length" 432de3b87aSKai Wang.Fa "Dwarf_Unsigned *attr_count" 442de3b87aSKai Wang.Fa "Dwarf_Error *err" 452de3b87aSKai Wang.Fc 462de3b87aSKai Wang.Sh DESCRIPTION 472de3b87aSKai WangFunction 482de3b87aSKai Wang.Fn dwarf_get_abbrev 492de3b87aSKai Wangretrieves information about an abbreviation from the DWARF abbreviations 502de3b87aSKai Wangsection, 512de3b87aSKai Wang.Dq ".debug_abbrev" . 522de3b87aSKai WangAbbreviation information is returned using an opaque descriptor 532de3b87aSKai Wangof type 542de3b87aSKai Wang.Vt Dwarf_Abbrev . 552de3b87aSKai WangThe returned 562de3b87aSKai Wang.Vt Dwarf_Abbrev 572de3b87aSKai Wangdescriptor may then be passed to the other abbreviation related APIs 582de3b87aSKai Wangin the DWARF(3) API to retrieve specific information about the 592de3b87aSKai Wangabbreviation. 602de3b87aSKai Wang.Pp 612de3b87aSKai WangArgument 622de3b87aSKai Wang.Ar dbg 632de3b87aSKai Wangshould reference a DWARF debug context allocated using 642de3b87aSKai Wang.Xr dwarf_init 3 . 652de3b87aSKai Wang.Pp 662de3b87aSKai WangArgument 672de3b87aSKai Wang.Ar offset 682de3b87aSKai Wangshould be an offset, relative to the 692de3b87aSKai Wang.Dq ".debug_abbrev" 702de3b87aSKai Wangsection, to the start of an abbreviation entry. 712de3b87aSKai Wang.Pp 722de3b87aSKai WangArgument 732de3b87aSKai Wang.Ar ret_abbrev 742de3b87aSKai Wangshould point to a location that will hold a pointer to the 752de3b87aSKai Wangreturned 762de3b87aSKai Wang.Vt Dwarf_Abbrev 772de3b87aSKai Wangdescriptor. 782de3b87aSKai Wang.Pp 792de3b87aSKai WangArgument 802de3b87aSKai Wang.Ar length 812de3b87aSKai Wangshould point to a location that will hold the number of bytes used 822de3b87aSKai Wangby the abbrevation in the DWARF 832de3b87aSKai Wang.Dq ".debug_abbrev" 842de3b87aSKai Wangsection. 852de3b87aSKai Wang.Pp 862de3b87aSKai WangArgument 872de3b87aSKai Wang.Ar attr_count 882de3b87aSKai Wangshould point to a location that will hold the number of 892de3b87aSKai Wangattributes in the abbrevation. 902de3b87aSKai Wang.Pp 912de3b87aSKai WangIf argument 922de3b87aSKai Wang.Ar err 932de3b87aSKai Wangis not NULL, it will be used to store error information in case of an 942de3b87aSKai Wangerror. 952de3b87aSKai Wang.Ss Memory Management 962de3b87aSKai WangThe memory area used for the 972de3b87aSKai Wang.Vt Dwarf_Abbrev 982de3b87aSKai Wangdescriptor returned in argument 992de3b87aSKai Wang.Ar ret_abbrev 1002de3b87aSKai Wangis allocated by the 1012de3b87aSKai Wang.Lb libdwarf . 1022de3b87aSKai WangApplication code should use function 1032de3b87aSKai Wang.Fn dwarf_dealloc 1042de3b87aSKai Wangwith the allocation type 1052de3b87aSKai Wang.Dv DW_DLA_ABBREV 1062de3b87aSKai Wangto free the memory area when the 1072de3b87aSKai Wang.Vt Dwarf_Abbrev 1082de3b87aSKai Wangdescriptor is no longer needed. 1092de3b87aSKai Wang.Ss Application Programming Notes 1102de3b87aSKai WangThe last abbreviation entry in a standard DWARF abbreviation section 1112de3b87aSKai Wangwill have a special length value of 1. 1122de3b87aSKai Wang.Sh RETURN VALUES 1132de3b87aSKai WangFunction 1142de3b87aSKai Wang.Fn dwarf_get_abbrev 1152de3b87aSKai Wangreturns 1162de3b87aSKai Wang.Dv DW_DLV_OK 1172de3b87aSKai Wangwhen it succeeds. 1182de3b87aSKai WangIt returns 1192de3b87aSKai Wang.Dv DW_DLV_NO_ENTRY 1202de3b87aSKai Wangif there is no abbreviation information at offset 1212de3b87aSKai Wang.Ar offset . 1222de3b87aSKai WangIn case of an error, it returns 1232de3b87aSKai Wang.Dv DW_DLV_ERROR 1242de3b87aSKai Wangand sets the argument 1252de3b87aSKai Wang.Ar err . 126*ae500c1fSEd Maste.Sh EXAMPLES 1272de3b87aSKai WangTo loop through all the abbreviation information associated with 1282de3b87aSKai Wanga DWARF debug context, use: 1292de3b87aSKai Wang.Bd -literal -offset indent 1302de3b87aSKai WangDwarf_Debug dbg; 1312de3b87aSKai WangDwarf_Abbrev ab; 1322de3b87aSKai WangDwarf_Off aboff; 1332de3b87aSKai WangDwarf_Unsigned length, attr_count; 1342de3b87aSKai WangDwarf_Half tag; 1352de3b87aSKai WangDwarf_Error de; 1362de3b87aSKai Wangint ret; 1372de3b87aSKai Wang 1382de3b87aSKai Wangwhile ((ret = dwarf_next_cu_header(dbg, NULL, NULL, &aboff, 1392de3b87aSKai Wang NULL, NULL, &de)) == DW_DLV_OK) { 1402de3b87aSKai Wang while ((ret = dwarf_get_abbrev(re->dbg, aboff, &ab, &length, 1412de3b87aSKai Wang &attr_count, &de)) == DW_DLV_OK) { 1422de3b87aSKai Wang if (length == 1) /* Last entry. */ 1432de3b87aSKai Wang break; 1442de3b87aSKai Wang aboff += length; 1452de3b87aSKai Wang if (dwarf_get_abbrev_tag(ab, &tag, &de) != DW_DLV_OK) { 1462de3b87aSKai Wang warnx("dwarf_get_abbrev_tag failed: %s", 1472de3b87aSKai Wang dwarf_errmsg(de)); 1482de3b87aSKai Wang continue; 1492de3b87aSKai Wang } 1502de3b87aSKai Wang if (ret != DW_DLV_OK) 1512de3b87aSKai Wang warnx("dwarf_get_abbrev: %s", dwarf_errmsg(de)); 1522de3b87aSKai Wang} 1532de3b87aSKai Wangif (ret == DW_DLV_ERROR) 1542de3b87aSKai Wang warnx("dwarf_next_cu_header: %s", dwarf_errmsg(de)); 1552de3b87aSKai Wang.Ed 156*ae500c1fSEd Maste.Sh ERRORS 157*ae500c1fSEd MasteFunction 158*ae500c1fSEd Maste.Fn dwarf_get_abbrev 159*ae500c1fSEd Mastecan fail with: 160*ae500c1fSEd Maste.Bl -tag -width ".Bq Er DW_DLE_NO_ENTRY" 161*ae500c1fSEd Maste.It Bq Er DW_DLE_ARGUMENT 162*ae500c1fSEd MasteOne of the arguments 163*ae500c1fSEd Maste.Ar dbg , 164*ae500c1fSEd Maste.Ar ret_abbrev , 165*ae500c1fSEd Maste.Ar length 166*ae500c1fSEd Masteor 167*ae500c1fSEd Maste.Ar attr_count 168*ae500c1fSEd Mastewas NULL. 169*ae500c1fSEd Maste.It Bq Er DW_DLE_NO_ENTRY 170*ae500c1fSEd MasteThere is no abbreviation information at offset 171*ae500c1fSEd Maste.Ar offset . 172*ae500c1fSEd Maste.El 1732de3b87aSKai Wang.Sh SEE ALSO 1742de3b87aSKai Wang.Xr dwarf 3 , 1752de3b87aSKai Wang.Xr dwarf_dealloc 3 , 1762de3b87aSKai Wang.Xr dwarf_get_abbrev_children_flag 3 , 177*ae500c1fSEd Maste.Xr dwarf_get_abbrev_code 3 , 178*ae500c1fSEd Maste.Xr dwarf_get_abbrev_entry 3 , 179*ae500c1fSEd Maste.Xr dwarf_get_abbrev_tag 3 180