xref: /freebsd/contrib/elftoolchain/libdwarf/dwarf_loclist_from_expr.3 (revision ae500c1ff8974130f7f2692772cf288b90349e0d)
1cf781b2eSEd Maste.\" Copyright (c) 2011,2014 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_loclist_from_expr.3 3644 2018-10-15 19:55:01Z jkoshy $
262de3b87aSKai Wang.\"
27cf781b2eSEd Maste.Dd December 21, 2014
282de3b87aSKai Wang.Dt DWARF_LOCLIST_FROM_EXPR 3
29*ae500c1fSEd Maste.Os
302de3b87aSKai Wang.Sh NAME
312de3b87aSKai Wang.Nm dwarf_loclist_from_expr ,
32cf781b2eSEd Maste.Nm dwarf_loclist_from_expr_a ,
33cf781b2eSEd Maste.Nm dwarf_loclist_from_expr_b
342de3b87aSKai Wang.Nd translate DWARF location expression bytes
352de3b87aSKai Wang.Sh LIBRARY
362de3b87aSKai Wang.Lb libdwarf
372de3b87aSKai Wang.Sh SYNOPSIS
382de3b87aSKai Wang.In libdwarf.h
392de3b87aSKai Wang.Ft int
402de3b87aSKai Wang.Fo dwarf_loclist_from_expr
412de3b87aSKai Wang.Fa "Dwarf_Debug dbg"
422de3b87aSKai Wang.Fa "Dwarf_Ptr bytes_in"
432de3b87aSKai Wang.Fa "Dwarf_Unsigned bytes_len"
442de3b87aSKai Wang.Fa "Dwarf_Locdesc **llbuf"
452de3b87aSKai Wang.Fa "Dwarf_Signed *listlen"
462de3b87aSKai Wang.Fa "Dwarf_Error *err"
472de3b87aSKai Wang.Fc
482de3b87aSKai Wang.Ft int
492de3b87aSKai Wang.Fo dwarf_loclist_from_expr_a
502de3b87aSKai Wang.Fa "Dwarf_Debug dbg"
512de3b87aSKai Wang.Fa "Dwarf_Ptr bytes_in"
522de3b87aSKai Wang.Fa "Dwarf_Unsigned bytes_len"
532de3b87aSKai Wang.Fa "Dwarf_Half addr_size"
542de3b87aSKai Wang.Fa "Dwarf_Locdesc **llbuf"
552de3b87aSKai Wang.Fa "Dwarf_Signed *listlen"
562de3b87aSKai Wang.Fa "Dwarf_Error *err"
572de3b87aSKai Wang.Fc
58cf781b2eSEd Maste.Ft int
59cf781b2eSEd Maste.Fo dwarf_loclist_from_expr_b
60cf781b2eSEd Maste.Fa "Dwarf_Debug dbg"
61cf781b2eSEd Maste.Fa "Dwarf_Ptr bytes_in"
62cf781b2eSEd Maste.Fa "Dwarf_Unsigned bytes_len"
63cf781b2eSEd Maste.Fa "Dwarf_Half addr_size"
64cf781b2eSEd Maste.Fa "Dwarf_Half offset_size"
65cf781b2eSEd Maste.Fa "Dwarf_Small version"
66cf781b2eSEd Maste.Fa "Dwarf_Locdesc **llbuf"
67cf781b2eSEd Maste.Fa "Dwarf_Signed *listlen"
68cf781b2eSEd Maste.Fa "Dwarf_Error *error"
69cf781b2eSEd Maste.Fc
702de3b87aSKai Wang.Sh DESCRIPTION
712de3b87aSKai WangFunction
722de3b87aSKai Wang.Fn dwarf_loclist_from_expr
732de3b87aSKai Wangtranslates DWARF location expression bytes into a
742de3b87aSKai Wang.Vt Dwarf_Locdesc
752de3b87aSKai Wangdescriptor.
762de3b87aSKai WangThe size for address related data is taken to be the default address
772de3b87aSKai Wangsize for the object being read.
782de3b87aSKai Wang.Pp
792de3b87aSKai WangArgument
802de3b87aSKai Wang.Ar dbg
812de3b87aSKai Wangshould reference a DWARF debug context allocated using
822de3b87aSKai Wang.Xr dwarf_init 3 .
832de3b87aSKai Wang.Pp
842de3b87aSKai WangArgument
852de3b87aSKai Wang.Ar bytes_in
862de3b87aSKai Wangshould point to an array of DWARF location expression bytes.
872de3b87aSKai Wang.Pp
882de3b87aSKai WangArgument
892de3b87aSKai Wang.Ar bytes_len
902de3b87aSKai Wangshould specify the number of the location expression bytes to be
912de3b87aSKai Wangtranslated.
922de3b87aSKai Wang.Pp
932de3b87aSKai WangArgument
942de3b87aSKai Wang.Ar llbuf
952de3b87aSKai Wangshould point to a location which will be set to a pointer
962de3b87aSKai Wangto a returned
972de3b87aSKai Wang.Vt Dwarf_Locdesc
982de3b87aSKai Wangdescriptor.
992de3b87aSKai Wang.Pp
1002de3b87aSKai WangArgument
1012de3b87aSKai Wang.Ar listlen
1022de3b87aSKai Wangshould point to a location which will hold the number of the
1032de3b87aSKai Wang.Vt Dwarf_Locdesc
1042de3b87aSKai Wangdescriptors returned.
1052de3b87aSKai WangIn this case it is always set to 1.
1062de3b87aSKai Wang.Pp
1072de3b87aSKai WangIf argument
1082de3b87aSKai Wang.Ar err
1092de3b87aSKai Wangis not NULL, it will be used to store error information in case of an
1102de3b87aSKai Wangerror.
1112de3b87aSKai Wang.Pp
1122de3b87aSKai WangFunction
1132de3b87aSKai Wang.Fn dwarf_loclist_from_expr_a
1142de3b87aSKai Wangis identical to function
1152de3b87aSKai Wang.Fn dwarf_loclist_from_expr ,
1162de3b87aSKai Wangexcept that it requires one additional argument
1172de3b87aSKai Wang.Ar addr_size ,
1182de3b87aSKai Wangwhich specifies the address size to use when translating the location
1192de3b87aSKai Wangexpression bytes.
120cf781b2eSEd Maste.Pp
121cf781b2eSEd MasteFunction
122cf781b2eSEd Maste.Fn dwarf_loclist_from_expr_b
123cf781b2eSEd Masteis identical to function
124cf781b2eSEd Maste.Fn dwarf_loclist_from_expr_a
125cf781b2eSEd Masteexcept that it requires two additional arguments for translating the
126cf781b2eSEd Mastelocation expression bytes.
127cf781b2eSEd MasteArgument
128cf781b2eSEd Maste.Ar offset_size
129cf781b2eSEd Mastespecifies the offset size, and argument
130cf781b2eSEd Maste.Ar version
131cf781b2eSEd Mastespecifies the DWARF version.
132cf781b2eSEd MasteThese values are required to correctly translate the
133cf781b2eSEd Maste.Dv DW_OP_GNU_implicit_pointer
134cf781b2eSEd Masteopcode.
1352de3b87aSKai Wang.Ss Memory Management
1362de3b87aSKai WangThe memory area used for the descriptor returned in argument
1372de3b87aSKai Wang.Ar llbuf
1382de3b87aSKai Wangis allocated by
1392de3b87aSKai Wang.Lb libdwarf .
1402de3b87aSKai WangWhen the descriptor is no longer needed, application code should use
1412de3b87aSKai Wangfunction
1422de3b87aSKai Wang.Xr dwarf_dealloc 3
1432de3b87aSKai Wangto free the memory area in two steps:
1442de3b87aSKai Wang.Bl -enum -compact
1452de3b87aSKai Wang.It
1462de3b87aSKai WangFirst, the array of
1472de3b87aSKai Wang.Vt Dwarf_Loc
1482de3b87aSKai Wangdescriptors pointed to by the
1492de3b87aSKai Wang.Ar ld_s
1502de3b87aSKai Wangfield of the
1512de3b87aSKai Wang.Vt Dwarf_Locdesc
1522de3b87aSKai Wangdescriptor should be deallocated using the allocation type
1532de3b87aSKai Wang.Dv DW_DLA_LOC_BLOCK .
1542de3b87aSKai Wang.It
1552de3b87aSKai WangNext, the application should free the
1562de3b87aSKai Wang.Ar llbuf
1572de3b87aSKai Wangpointer using the allocation type
1582de3b87aSKai Wang.Dv DW_DLA_LOCDESC .
1592de3b87aSKai Wang.El
1602de3b87aSKai Wang.Sh RETURN VALUES
1612de3b87aSKai WangOn success, these functions returns
1622de3b87aSKai Wang.Dv DW_DLV_OK .
1632de3b87aSKai WangIn case of an error, they return
1642de3b87aSKai Wang.Dv DW_DLV_ERROR
1652de3b87aSKai Wangand set the argument
1662de3b87aSKai Wang.Ar err .
1672de3b87aSKai Wang.Sh ERRORS
1682de3b87aSKai WangThese functions may fail with the following errors:
1692de3b87aSKai Wang.Bl -tag -width ".Bq Er DW_DLE_LOC_EXPR_BAD"
1702de3b87aSKai Wang.It Bq Er DW_DLE_ARGUMENT
1712de3b87aSKai WangOne of the arguments
1722de3b87aSKai Wang.Va dbg ,
1732de3b87aSKai Wang.Va bytes_in ,
1742de3b87aSKai Wang.Va llbuf
1752de3b87aSKai Wangor
1762de3b87aSKai Wang.Va listlen
1772de3b87aSKai Wangwas NULL.
1782de3b87aSKai Wang.It Bq Er DW_DLE_ARGUMENT
1792de3b87aSKai WangArgument
1802de3b87aSKai Wang.Ar bytes_len
1812de3b87aSKai Wangwas 0.
1822de3b87aSKai Wang.It Bq Er DW_DLE_ARGUMENT
1832de3b87aSKai WangThe value of argument
1842de3b87aSKai Wang.Ar addr_size
1852de3b87aSKai Wangwas invalid.
1862de3b87aSKai Wang.It Bq Er DW_DLE_LOC_EXPR_BAD
1872de3b87aSKai WangAn unknown or invalid operation was found in the location expression
1882de3b87aSKai Wangbytes provided in argument
1892de3b87aSKai Wang.Ar bytes_in .
1902de3b87aSKai Wang.It Bq Er DW_DLE_MEMORY
1912de3b87aSKai WangAn out of memory condition was encountered during the execution of
1922de3b87aSKai Wangthis function.
1932de3b87aSKai Wang.El
1942de3b87aSKai Wang.Sh SEE ALSO
1952de3b87aSKai Wang.Xr dwarf 3 ,
1962de3b87aSKai Wang.Xr dwarf_dealloc 3 ,
1972de3b87aSKai Wang.Xr dwarf_get_fde_info_for_all_regs3 3 ,
1982de3b87aSKai Wang.Xr dwarf_get_fde_info_for_cfa_reg3 3 ,
1992de3b87aSKai Wang.Xr dwarf_get_fde_info_for_reg3 3 ,
200*ae500c1fSEd Maste.Xr dwarf_get_loclist_entry 3 ,
201*ae500c1fSEd Maste.Xr dwarf_loclist_n 3
202