1.\" Copyright (c) 2011 Kai Wang 2.\" All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 13.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23.\" SUCH DAMAGE. 24.\" 25.\" $Id: dwarf_get_weaks.3 3640 2018-10-14 14:09:13Z jkoshy $ 26.\" 27.Dd April 10, 2011 28.Dt DWARF_GET_WEAKS 3 29.Os 30.Sh NAME 31.Nm dwarf_get_weaks , 32.Nm dwarf_weak_cu_offset , 33.Nm dwarf_weak_die_offset , 34.Nm dwarf_weak_name_offsets , 35.Nm dwarf_weakname 36.Nd retrieve information about weak symbols 37.Sh LIBRARY 38.Lb libdwarf 39.Sh SYNOPSIS 40.In libdwarf.h 41.Ft int 42.Fo dwarf_get_weaks 43.Fa "Dwarf_Debug dbg" 44.Fa "Dwarf_Weak **weaks" 45.Fa "Dwarf_Signed *nweaks" 46.Fa "Dwarf_Error *err" 47.Fc 48.Ft int 49.Fo dwarf_weak_cu_offset 50.Fa "Dwarf_Weak weak" 51.Fa "Dwarf_Off *cu_offset" 52.Fa "Dwarf_Error *err" 53.Fc 54.Ft int 55.Fo dwarf_weak_die_offset 56.Fa "Dwarf_Weak weak" 57.Fa "Dwarf_Off *die_offset" 58.Fa "Dwarf_Error *err" 59.Fc 60.Ft int 61.Fo dwarf_weak_name_offsets 62.Fa "Dwarf_Weak weak" 63.Fa "char **name" 64.Fa "Dwarf_Off *die_offset" 65.Fa "Dwarf_Off *cu_die_offset" 66.Fa "Dwarf_Error *err" 67.Fc 68.Ft int 69.Fo dwarf_weakname 70.Fa "Dwarf_Weak weak" 71.Fa "char **name" 72.Fa "Dwarf_Error *err" 73.Fc 74.Sh DESCRIPTION 75These functions retrieve information about weak symbols from the 76lookup tables in the (SGI-specific) 77.Dq ".debug_weaknames" 78section. 79Information about weak symbols is returned using opaque descriptors 80of type 81.Vt Dwarf_Weak . 82Applications need to use the functions described below to retrieve 83the name and offset information contained in these descriptors. 84.Pp 85Function 86.Fn dwarf_get_weaks 87retrieves descriptors for all the weak symbols associated with the 88DWARF debug context specified by argument 89.Ar dbg . 90The argument 91.Ar weaks 92should point to a location that will be set to a pointer to an array 93of 94.Vt Dwarf_Weak 95descriptors. 96The argument 97.Ar nweaks 98should point to a location that will be set to the number of 99descriptors returned. 100.Pp 101Function 102.Fn dwarf_weak_cu_offset 103returns the offset, relative to the 104.Dq ".debug_info" 105section, of the compilation unit that contains the debugging 106information entry associated with the argument 107.Ar weak . 108Argument 109.Ar cu_offset 110should point to a location that will hold the returned offset. 111.Pp 112Function 113.Fn dwarf_weak_die_offset 114retrieves the offset, relative to the 115.Dq ".debug_info" 116section, of the debugging information entry associated with the 117argument 118.Ar weak , 119and stores it into the location pointed to by the argument 120.Ar die_offset . 121.Pp 122Function 123.Fn dwarf_weak_name_offsets 124retrieves the name and offsets for the debugging information 125entry for argument 126.Ar weak . 127Argument 128.Ar name 129should point to a location which will be set to a pointer to a 130NUL-terminated string containing the name of the associated debugging 131information entry. 132Argument 133.Ar die_offset 134should point to a location which will be set to the offset, relative 135to the 136.Dq ".debug_info" 137section, of the associated debugging information entry. 138Argument 139.Ar cu_die_offset 140should point to a location which will be set to the 141offset, relative to the 142.Dq ".debug_info" 143section, of the first debugging information entry in the compilation 144unit associated with argument 145.Ar weak . 146.Pp 147Function 148.Fn dwarf_weakname 149sets the location pointed to by argument 150.Ar name 151to a pointer to a NUL-terminated string holding the name of the 152debugging information entry associated with the argument 153.Ar weak . 154.Ss Memory Management 155The memory area used for the array of 156.Vt Dwarf_Weak 157descriptors returned in argument 158.Ar weaks 159by function 160.Fn dwarf_get_weaks 161is owned by the 162.Lb libdwarf . 163Application code should not attempt to directly free this pointer. 164Portable code should instead use the function 165.Xr dwarf_weaks_dealloc 3 166to indicate that the memory area may be freed. 167.Pp 168The memory area used for the string returned in the 169.Ar name 170argument to functions 171.Fn dwarf_weak_name_offsets 172and 173.Fn dwarf_weakname 174is owned by the 175.Lb libdwarf . 176Portable code should indicate that the memory area can 177be freed using the 178.Xr dwarf_dealloc 3 179function. 180.Ss Error Returns 181If argument 182.Ar err 183is not NULL, these functions will use it to store error information, 184in case of an error. 185.Sh RETURN VALUES 186On success, these functions returns 187.Dv DW_DLV_OK . 188In case of an error, they return 189.Dv DW_DLV_ERROR 190and set the argument 191.Ar err . 192.Sh ERRORS 193These functions may fail with the following errors: 194.Bl -tag -width ".Bq Er DW_DLE_ARGUMENT" 195.It Bq Er DW_DLE_ARGUMENT 196One of the arguments 197.Va cu_die_offset , 198.Va cu_offset , 199.Va dbg , 200.Va die_offset , 201.Va weak , 202.Va weaks , 203.Va name , 204or 205.Va nweaks 206was NULL. 207.It Bq Er DW_DLE_NO_ENTRY 208The DWARF debugging context referenced by argument 209.Ar dbg 210did not contain information about weak symbols. 211.El 212.Sh SEE ALSO 213.Xr dwarf 3 , 214.Xr dwarf_get_cu_die_offset_given_cu_header_offset 3 , 215.Xr dwarf_weaks_dealloc 3 216