1441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Interfaces for libdw.
2cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
3cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   This file is part of Red Hat elfutils.
4cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
5cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Red Hat elfutils is free software; you can redistribute it and/or modify
6cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   it under the terms of the GNU General Public License as published by the
7cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Free Software Foundation; version 2 of the License.
8cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
9cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Red Hat elfutils is distributed in the hope that it will be useful, but
10cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   WITHOUT ANY WARRANTY; without even the implied warranty of
11cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   General Public License for more details.
13cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
14cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   You should have received a copy of the GNU General Public License along
15cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   with Red Hat elfutils; if not, write to the Free Software Foundation,
16cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
17cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
18cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   In addition, as a special exception, Red Hat, Inc. gives You the
19cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   additional right to link the code of Red Hat elfutils with code licensed
20cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   under any Open Source Initiative certified open source license
21cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   (http://www.opensource.org/licenses/index.php) which requires the
22cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   distribution of source code with any binary distribution and to
23cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   distribute linked combinations of the two.  Non-GPL Code permitted under
24cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   this exception must only link to the code of Red Hat elfutils through
25cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   those well defined interfaces identified in the file named EXCEPTION
26cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   found in the source code files (the "Approved Interfaces").  The files
27cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   of Non-GPL Code may instantiate templates or use macros or inline
28cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   functions from the Approved Interfaces without causing the resulting
29cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   work to be covered by the GNU General Public License.  Only Red Hat,
30cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Inc. may make changes or additions to the list of Approved Interfaces.
31cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Red Hat's grant of this exception is conditioned upon your not adding
32cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   any new exceptions.  If you wish to add a new Approved Interface or
33cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   exception, please contact Red Hat.  You must obey the GNU General Public
34cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   License in all respects for all of the Red Hat elfutils code and other
35cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   code used in conjunction with Red Hat elfutils except the Non-GPL Code
36cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   covered by this exception.  If you modify this file, you may extend this
37cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   exception to your version of the file, but you are not obligated to do
38cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   so.  If you do not wish to provide this exception without modification,
39cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   you must delete this exception statement from your version and license
40cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   this file solely under the GPL without exception.
41cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
42cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Red Hat elfutils is an included package of the Open Invention Network.
43cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   An included package of the Open Invention Network is a package for which
44cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Open Invention Network licensees cross-license their patents.  No patent
45cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   license is granted, either expressly or impliedly, by designation as an
46cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   included package.  Should you wish to participate in the Open Invention
47cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Network licensing program, please visit www.openinventionnetwork.com
48cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   <http://www.openinventionnetwork.com>.  */
49441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
50441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#ifndef _LIBDW_H
51441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define _LIBDW_H	1
52441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
53441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <gelf.h>
54441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <stdbool.h>
55441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <stddef.h>
56441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
57441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
58441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
59441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# define __nonnull_attribute__(...) __attribute__ ((__nonnull__ (__VA_ARGS__)))
60cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define __deprecated_attribute__ __attribute__ ((__deprecated__))
61441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#else
62441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project# define __nonnull_attribute__(args...)
63cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define __deprecated_attribute__
64cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#endif
65cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
66cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
67cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#ifdef __GNUC_STDC_INLINE__
68cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define __libdw_extern_inline extern __inline __attribute__ ((__gnu_inline__))
69cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#else
70cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define __libdw_extern_inline extern __inline
71441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#endif
72441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
73441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
74441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Mode for the session.  */
75441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef enum
76441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  {
77441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    DWARF_C_READ,		/* Read .. */
78441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    DWARF_C_RDWR,		/* Read and write .. */
79441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    DWARF_C_WRITE,		/* Write .. */
80441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  }
81441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source ProjectDwarf_Cmd;
82441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
83441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
84441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Callback results.  */
85441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectenum
86441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{
87441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  DWARF_CB_OK = 0,
88441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  DWARF_CB_ABORT
89441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project};
90441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
91441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
92441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Error values.  */
93441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectenum
94441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  {
95441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project    DW_TAG_invalid = 0
96441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define DW_TAG_invalid	DW_TAG_invalid
97441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  };
98441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
99441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
100441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Type for offset in DWARF file.  */
101441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef GElf_Off Dwarf_Off;
102441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
103441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Type for address in DWARF file.  */
104441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef GElf_Addr Dwarf_Addr;
105441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
106441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Integer types.  Big enough to hold any numeric value.  */
107441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef GElf_Xword Dwarf_Word;
108441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef GElf_Sxword Dwarf_Sword;
109441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* For the times we know we do not need that much.  */
110441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef GElf_Half Dwarf_Half;
111441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
112441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
113441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* DWARF abbreviation record.  */
114441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct Dwarf_Abbrev Dwarf_Abbrev;
115441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
116cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Returned to show the last DIE has be returned.  */
117cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#define DWARF_END_ABBREV ((Dwarf_Abbrev *) -1l)
118cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
119441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Source code line information for CU.  */
120441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct Dwarf_Lines_s Dwarf_Lines;
121441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
122441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* One source code line information.  */
123441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct Dwarf_Line_s Dwarf_Line;
124441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
125441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Source file information.  */
126441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct Dwarf_Files_s Dwarf_Files;
127441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
128441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* One address range record.  */
129441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct Dwarf_Arange_s Dwarf_Arange;
130441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
131441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Address ranges of a file.  */
132441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct Dwarf_Aranges_s Dwarf_Aranges;
133441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
134441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* CU representation.  */
135441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct Dwarf_CU;
136441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
137cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Macro information.  */
138cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengtypedef struct Dwarf_Macro_s Dwarf_Macro;
139cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
140441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Attribute representation.  */
141441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct
142441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{
143441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  unsigned int code;
144441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  unsigned int form;
145441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  unsigned char *valp;
146441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  struct Dwarf_CU *cu;
147441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project} Dwarf_Attribute;
148441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
149441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
150441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Data block representation.  */
151441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct
152441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{
153441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  Dwarf_Word length;
154441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  unsigned char *data;
155441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project} Dwarf_Block;
156441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
157441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
158441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* DIE information.  */
159441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct
160441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{
161441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  /* The offset can be computed from the address.  */
162441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  void *addr;
163441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  struct Dwarf_CU *cu;
164441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  Dwarf_Abbrev *abbrev;
165441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  // XXX We'll see what other information will be needed.
166cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  long int padding__;
167441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project} Dwarf_Die;
168441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
169441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Returned to show the last DIE has be returned.  */
170441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define DWARF_END_DIE ((Dwarf_Die *) -1l)
171441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
172441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
173441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Global symbol information.  */
174441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct
175441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{
176441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  Dwarf_Off cu_offset;
177441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  Dwarf_Off die_offset;
178441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  const char *name;
179441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project} Dwarf_Global;
180441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
181441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
182cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* One operation in a DWARF location expression.
183cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   A location expression is an array of these.  */
184441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct
185441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{
186441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  uint8_t atom;			/* Operation */
187441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  Dwarf_Word number;		/* Operand */
188441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  Dwarf_Word number2;		/* Possible second operand */
189441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  Dwarf_Word offset;		/* Offset in location expression */
190cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng} Dwarf_Op;
191441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
192441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
193441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Handle for debug sessions.  */
194441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct Dwarf Dwarf;
195441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
196441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
197441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Out-Of-Memory handler.  */
198cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#if __GNUC__ < 4
199cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengtypedef void (*Dwarf_OOM) (void);
200cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#else
201441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef void (*__attribute__ ((noreturn)) Dwarf_OOM) (void);
202cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#endif
203441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
204441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
205cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#ifdef __cplusplus
206cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern "C" {
207cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#endif
208cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
209441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Create a handle for a new debug session.  */
210441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf *dwarf_begin (int fildes, Dwarf_Cmd cmd);
211441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
212441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Create a handle for a new debug session for an ELF file.  */
213441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf *dwarf_begin_elf (Elf *elf, Dwarf_Cmd cmd, Elf_Scn *scngrp);
214441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
215441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Retrieve ELF descriptor used for DWARF access.  */
216441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf *dwarf_getelf (Dwarf *dwarf);
217441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
218441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Release debugging handling context.  */
219441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_end (Dwarf *dwarf);
220441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
221441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
222441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get the data block for the .debug_info section.  */
223441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf_Data *dwarf_getscn_info (Dwarf *dwarf);
224441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
225441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Read the header for the DWARF CU header.  */
226441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_nextcu (Dwarf *dwarf, Dwarf_Off off, Dwarf_Off *next_off,
227441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project			 size_t *header_sizep, Dwarf_Off *abbrev_offsetp,
228441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project			 uint8_t *address_sizep, uint8_t *offset_sizep)
229441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (3);
230441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
231441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
232441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return DIE at given offset.  */
233441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf_Die *dwarf_offdie (Dwarf *dbg, Dwarf_Off offset,
234441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project				Dwarf_Die *result) __nonnull_attribute__ (3);
235441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
236441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return offset of DIE.  */
237441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf_Off dwarf_dieoffset (Dwarf_Die *die);
238441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
239441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return offset of DIE in CU.  */
240441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf_Off dwarf_cuoffset (Dwarf_Die *die);
241441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
242cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return CU DIE containing given DIE.  */
243cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern Dwarf_Die *dwarf_diecu (Dwarf_Die *die, Dwarf_Die *result,
244cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng			       uint8_t *address_sizep, uint8_t *offset_sizep)
245cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     __nonnull_attribute__ (2);
246cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
247cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return CU DIE containing given address.  */
248cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern Dwarf_Die *dwarf_addrdie (Dwarf *dbg, Dwarf_Addr addr,
249cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng				 Dwarf_Die *result) __nonnull_attribute__ (3);
250cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
251cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return child of current DIE.  */
252441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_child (Dwarf_Die *die, Dwarf_Die *result)
253441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
254441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
255cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Locates the first sibling of DIE and places it in RESULT.
256cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Returns 0 if a sibling was found, -1 if something went wrong.
257cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Returns 1 if no sibling could be found and, if RESULT is not
258cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   the same as DIE, it sets RESULT->addr to the address of the
259cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   (non-sibling) DIE that follows this one, or NULL if this DIE
260cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   was the last one in the cokmpilation unit.  */
261441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_siblingof (Dwarf_Die *die, Dwarf_Die *result)
262441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
263441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
264441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Check whether the DIE has children.  */
265cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_haschildren (Dwarf_Die *die) __nonnull_attribute__ (1);
266cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
267cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Walks the attributes of DIE, starting at the one OFFSET bytes in,
268cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   calling the CALLBACK function for each one.  Stops if the callback
269cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   function ever returns a value other than DWARF_CB_OK and returns the
270cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   offset of the offending attribute.  If the end of the attributes
271cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   is reached 1 is returned.  If something goes wrong -1 is returned and
272cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   the dwarf error number is set.  */
273441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern ptrdiff_t dwarf_getattrs (Dwarf_Die *die,
274441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project				 int (*callback) (Dwarf_Attribute *, void *),
275cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng				 void *arg, ptrdiff_t offset)
276cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     __nonnull_attribute__ (2);
277441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
278441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return tag of given DIE.  */
279cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_tag (Dwarf_Die *die) __nonnull_attribute__ (1);
280441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
281441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
282441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return specific attribute of DIE.  */
283441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf_Attribute *dwarf_attr (Dwarf_Die *die, unsigned int search_name,
284441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project				    Dwarf_Attribute *result)
285441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (3);
286441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
287441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Check whether given DIE has specific attribute.  */
288441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_hasattr (Dwarf_Die *die, unsigned int search_name);
289441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
290cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* These are the same as dwarf_attr and dwarf_hasattr, respectively,
291cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   but they resolve an indirect attribute through DW_AT_abstract_origin.  */
292cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern Dwarf_Attribute *dwarf_attr_integrate (Dwarf_Die *die,
293cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng					      unsigned int search_name,
294cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng					      Dwarf_Attribute *result)
295cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     __nonnull_attribute__ (3);
296cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_hasattr_integrate (Dwarf_Die *die, unsigned int search_name);
297cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
298cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
299cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
300441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
301441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Check whether given attribute has specific form.  */
302441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_hasform (Dwarf_Attribute *attr, unsigned int search_form);
303441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
304441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return attribute code of given attribute.  */
305441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern unsigned int dwarf_whatattr (Dwarf_Attribute *attr);
306441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
307441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return form code of given attribute.  */
308441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern unsigned int dwarf_whatform (Dwarf_Attribute *attr);
309441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
310441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
311441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return string associated with given attribute.  */
312441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern const char *dwarf_formstring (Dwarf_Attribute *attrp);
313441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
314441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return unsigned constant represented by attribute.  */
315441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_formudata (Dwarf_Attribute *attr, Dwarf_Word *return_uval)
316441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
317441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
318441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return signed constant represented by attribute.  */
319441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_formsdata (Dwarf_Attribute *attr, Dwarf_Sword *return_uval)
320441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
321441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
322441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return address represented by attribute.  */
323441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_formaddr (Dwarf_Attribute *attr, Dwarf_Addr *return_addr)
324441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
325441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
326cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* This function is deprecated.  Always use dwarf_formref_die instead.
327cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Return reference offset represented by attribute.  */
328441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_formref (Dwarf_Attribute *attr, Dwarf_Off *return_offset)
329cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     __nonnull_attribute__ (2) __deprecated_attribute__;
330cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
331cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Look up the DIE in a reference-form attribute.  */
332cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern Dwarf_Die *dwarf_formref_die (Dwarf_Attribute *attr, Dwarf_Die *die_mem)
333441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
334441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
335441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return block represented by attribute.  */
336441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_formblock (Dwarf_Attribute *attr, Dwarf_Block *return_block)
337441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
338441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
339441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return flag represented by attribute.  */
340441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_formflag (Dwarf_Attribute *attr, bool *return_bool)
341441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
342441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
343441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
344441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Simplified attribute value access functions.  */
345441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
346441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return string in name attribute of DIE.  */
347441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern const char *dwarf_diename (Dwarf_Die *die);
348441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
349441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return high PC attribute of DIE.  */
350441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_highpc (Dwarf_Die *die, Dwarf_Addr *return_addr)
351441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
352441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
353441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return low PC attribute of DIE.  */
354441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_lowpc (Dwarf_Die *die, Dwarf_Addr *return_addr)
355441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
356441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
357cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return entry_pc or low_pc attribute of DIE.  */
358cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_entrypc (Dwarf_Die *die, Dwarf_Addr *return_addr)
359cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     __nonnull_attribute__ (2);
360cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
361cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return 1 if DIE's lowpc/highpc or ranges attributes match the PC address,
362cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   0 if not, or -1 for errors.  */
363cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_haspc (Dwarf_Die *die, Dwarf_Addr pc);
364cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
365cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Enumerate the PC address ranges covered by this DIE, covering all
366cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   addresses where dwarf_haspc returns true.  In the first call OFFSET
367cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   should be zero and *BASEP need not be initialized.  Returns -1 for
368cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   errors, zero when there are no more address ranges to report, or a
369cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   nonzero OFFSET value to pass to the next call.  Each subsequent call
370cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   must preserve *BASEP from the prior call.  Successful calls fill in
371cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   *STARTP and *ENDP with a contiguous address range.  */
372cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern ptrdiff_t dwarf_ranges (Dwarf_Die *die,
373cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng			       ptrdiff_t offset, Dwarf_Addr *basep,
374cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng			       Dwarf_Addr *startp, Dwarf_Addr *endp);
375cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
376cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
377441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return byte size attribute of DIE.  */
378441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_bytesize (Dwarf_Die *die);
379441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
380441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return bit size attribute of DIE.  */
381441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_bitsize (Dwarf_Die *die);
382441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
383441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return bit offset attribute of DIE.  */
384441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_bitoffset (Dwarf_Die *die);
385441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
386441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return array order attribute of DIE.  */
387441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_arrayorder (Dwarf_Die *die);
388441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
389441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return source language attribute of DIE.  */
390441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_srclang (Dwarf_Die *die);
391441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
392441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
393441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get abbreviation at given offset for given DIE.  */
394441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf_Abbrev *dwarf_getabbrev (Dwarf_Die *die, Dwarf_Off offset,
395441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project				      size_t *lengthp);
396441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
397441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get abbreviation at given offset in .debug_abbrev section.  */
398441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_offabbrev (Dwarf *dbg, Dwarf_Off offset, size_t *lengthp,
399441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project			    Dwarf_Abbrev *abbrevp)
400441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (4);
401441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
402441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get abbreviation code.  */
403441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern unsigned int dwarf_getabbrevcode (Dwarf_Abbrev *abbrev);
404441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
405441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get abbreviation tag.  */
406441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern unsigned int dwarf_getabbrevtag (Dwarf_Abbrev *abbrev);
407441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
408441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return true if abbreviation is children flag set.  */
409441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_abbrevhaschildren (Dwarf_Abbrev *abbrev);
410441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
411441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get number of attributes of abbreviation.  */
412441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_getattrcnt (Dwarf_Abbrev *abbrev, size_t *attrcntp)
413441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
414441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
415441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get specific attribute of abbreviation.  */
416441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_getabbrevattr (Dwarf_Abbrev *abbrev, size_t idx,
417441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project				unsigned int *namep, unsigned int *formp,
418441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project				Dwarf_Off *offset);
419441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
420441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
421441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get string from-debug_str section.  */
422441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern const char *dwarf_getstring (Dwarf *dbg, Dwarf_Off offset,
423441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project				    size_t *lenp);
424441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
425441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
426441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get public symbol information.  */
427441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern ptrdiff_t dwarf_getpubnames (Dwarf *dbg,
428441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project				    int (*callback) (Dwarf *, Dwarf_Global *,
429441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project						     void *),
430441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project				    void *arg, ptrdiff_t offset)
431441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
432441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
433441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
434441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get source file information for CU.  */
435441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines,
436441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project			      size_t *nlines) __nonnull_attribute__ (2, 3);
437441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
438441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return one of the source lines of the CU.  */
439441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf_Line *dwarf_onesrcline (Dwarf_Lines *lines, size_t idx);
440441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
441441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get the file source files used in the CU.  */
442441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_getsrcfiles (Dwarf_Die *cudie, Dwarf_Files **files,
443441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project			      size_t *nfiles)
444441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
445441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
446441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
447441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get source for address in CU.  */
448441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf_Line *dwarf_getsrc_die (Dwarf_Die *cudie, Dwarf_Addr addr);
449441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
450cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Get source for file and line number.  */
451cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_getsrc_file (Dwarf *dbg, const char *fname, int line, int col,
452cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng			      Dwarf_Line ***srcsp, size_t *nsrcs)
453cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     __nonnull_attribute__ (2, 5, 6);
454cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
455cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
456441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return line address.  */
457441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_lineaddr (Dwarf_Line *line, Dwarf_Addr *addrp);
458441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
459441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return line number.  */
460441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_lineno (Dwarf_Line *line, int *linep)
461441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
462441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
463441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return column in line.  */
464441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_linecol (Dwarf_Line *line, int *colp)
465441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
466441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
467441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return true if record is for beginning of a statement.  */
468441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_linebeginstatement (Dwarf_Line *line, bool *flagp)
469441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
470441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
471441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return true if record is for end of sequence.  */
472441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_lineendsequence (Dwarf_Line *line, bool *flagp)
473441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
474441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
475441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return true if record is for beginning of a basic block.  */
476441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_lineblock (Dwarf_Line *line, bool *flagp)
477441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
478441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
479441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return true if record is for end of prologue.  */
480441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_lineprologueend (Dwarf_Line *line, bool *flagp)
481441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
482441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
483441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return true if record is for beginning of epilogue.  */
484441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_lineepiloguebegin (Dwarf_Line *line, bool *flagp)
485441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
486441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
487441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
488441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Find line information for address.  */
489441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern const char *dwarf_linesrc (Dwarf_Line *line,
490441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project				  Dwarf_Word *mtime, Dwarf_Word *length);
491441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
492441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return file information.  */
493441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern const char *dwarf_filesrc (Dwarf_Files *file, size_t idx,
494441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project				  Dwarf_Word *mtime, Dwarf_Word *length);
495441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
496cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return the directory list used in the file information extracted.
497cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   (*RESULT)[0] is the CU's DW_AT_comp_dir value, and may be null.
498cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   (*RESULT)[0..*NDIRS-1] are the compile-time include directory path
499cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   encoded by the compiler.  */
500cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_getsrcdirs (Dwarf_Files *files,
501cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng			     const char *const **result, size_t *ndirs)
502cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  __nonnull_attribute__ (2, 3);
503cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
504cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
505cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return location expression, decoded as a list of operations.  */
506cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_getlocation (Dwarf_Attribute *attr, Dwarf_Op **expr,
507cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng			      size_t *exprlen) __nonnull_attribute__ (2, 3);
508cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
509cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return location expressions.  If the attribute uses a location list,
510cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   ADDRESS selects the relevant location expressions from the list.
511cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   There can be multiple matches, resulting in multiple expressions to
512cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   return.  EXPRS and EXPRLENS are parallel arrays of NLOCS slots to
513cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   fill in.  Returns the number of locations filled in, or -1 for
514cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   errors.  If EXPRS is a null pointer, stores nothing and returns the
515cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   total number of locations.  A return value of zero means that the
516cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   location list indicated no value is accessible.  */
517cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_getlocation_addr (Dwarf_Attribute *attr, Dwarf_Addr address,
518cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng				   Dwarf_Op **exprs, size_t *exprlens,
519cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng				   size_t nlocs);
520cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
521cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
522cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return scope DIEs containing PC address.
523cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Sets *SCOPES to a malloc'd array of Dwarf_Die structures,
524cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   and returns the number of elements in the array.
525cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   (*SCOPES)[0] is the DIE for the innermost scope containing PC,
526cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   (*SCOPES)[1] is the DIE for the scope containing that scope, and so on.
527cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Returns -1 for errors or 0 if no scopes match PC.  */
528cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_getscopes (Dwarf_Die *cudie, Dwarf_Addr pc,
529cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng			    Dwarf_Die **scopes);
530cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
531cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return scope DIEs containing the given DIE.
532cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Sets *SCOPES to a malloc'd array of Dwarf_Die structures,
533cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   and returns the number of elements in the array.
534cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   (*SCOPES)[0] is a copy of DIE.
535cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   (*SCOPES)[1] is the DIE for the scope containing that scope, and so on.
536cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Returns -1 for errors or 0 if DIE is not found in any scope entry.  */
537cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_getscopes_die (Dwarf_Die *die, Dwarf_Die **scopes);
538cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
539cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
540cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Search SCOPES[0..NSCOPES-1] for a variable called NAME.
541cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Ignore the first SKIP_SHADOWS scopes that match the name.
542cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   If MATCH_FILE is not null, accept only declaration in that source file;
543cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   if MATCH_LINENO or MATCH_LINECOL are also nonzero, accept only declaration
544cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   at that line and column.
545cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
546cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   If successful, fill in *RESULT with the DIE of the variable found,
547cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   and return N where SCOPES[N] is the scope defining the variable.
548cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Return -1 for errors or -2 for no matching variable found.  */
549cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_getscopevar (Dwarf_Die *scopes, int nscopes,
550cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng			      const char *name, int skip_shadows,
551cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng			      const char *match_file,
552cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng			      int match_lineno, int match_linecol,
553cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng			      Dwarf_Die *result);
554441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
555441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
556441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
557441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return list address ranges.  */
558441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_getaranges (Dwarf *dbg, Dwarf_Aranges **aranges,
559441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project			     size_t *naranges)
560441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
561441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
562441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return one of the address range entries.  */
563441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf_Arange *dwarf_onearange (Dwarf_Aranges *aranges, size_t idx);
564441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
565441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return information in address range record.  */
566441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_getarangeinfo (Dwarf_Arange *arange, Dwarf_Addr *addrp,
567441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project				Dwarf_Word *lengthp, Dwarf_Off *offsetp);
568441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
569441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get address range which includes given address.  */
570441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf_Arange *dwarf_getarange_addr (Dwarf_Aranges *aranges,
571441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project					   Dwarf_Addr addr);
572441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
573441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
574cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
575cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Get functions in CUDIE.  */
576cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern ptrdiff_t dwarf_getfuncs (Dwarf_Die *cudie,
577cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng				 int (*callback) (Dwarf_Die *, void *),
578cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng				 void *arg, ptrdiff_t offset);
579cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
580cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
581cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return file name containing definition of the given declaration.  */
582cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern const char *dwarf_decl_file (Dwarf_Die *decl);
583cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
584cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Get line number of beginning of given declaration.  */
585cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_decl_line (Dwarf_Die *decl, int *linep)
586cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     __nonnull_attribute__ (2);
587cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
588cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Get column number of beginning of given declaration.  */
589cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_decl_column (Dwarf_Die *decl, int *colp)
590cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     __nonnull_attribute__ (2);
591cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
592cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
593cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return nonzero if given function is an abstract inline definition.  */
594cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_func_inline (Dwarf_Die *func);
595cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
596cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Find each concrete inlined instance of the abstract inline definition.  */
597cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_func_inline_instances (Dwarf_Die *func,
598cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng					int (*callback) (Dwarf_Die *, void *),
599cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng					void *arg);
600cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
601cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
602cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Find the appropriate PC location or locations for function entry
603cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   breakpoints for the given DW_TAG_subprogram DIE.  Returns -1 for errors.
604cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   On success, returns the number of breakpoint locations (never zero)
605cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   and sets *BKPTS to a malloc'd vector of addresses.  */
606cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_entry_breakpoints (Dwarf_Die *die, Dwarf_Addr **bkpts);
607cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
608cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
609441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Call callback function for each of the macro information entry for
610441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   the CU.  */
611441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern ptrdiff_t dwarf_getmacros (Dwarf_Die *cudie,
612441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project				  int (*callback) (Dwarf_Macro *, void *),
613441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project				  void *arg, ptrdiff_t offset)
614441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project     __nonnull_attribute__ (2);
615441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
616cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return macro opcode.  */
617cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_macro_opcode (Dwarf_Macro *macro, unsigned int *opcodep)
618cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     __nonnull_attribute__ (2);
619cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
620cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return first macro parameter.  */
621cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_macro_param1 (Dwarf_Macro *macro, Dwarf_Word *paramp)
622cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     __nonnull_attribute__ (2);
623cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
624cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return second macro parameter.  */
625cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int dwarf_macro_param2 (Dwarf_Macro *macro, Dwarf_Word *paramp,
626cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng			       const char **strp);
627cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
628441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
629441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return error code of last failing function call.  This value is kept
630441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   separately for each thread.  */
631441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int dwarf_errno (void);
632441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
633441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return error string for ERROR.  If ERROR is zero, return error string
634441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   for most recent error or NULL is none occurred.  If ERROR is -1 the
635441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   behaviour is similar to the last case except that not NULL but a legal
636441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project   string is returned.  */
637441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern const char *dwarf_errmsg (int err);
638441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
639441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
640441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Register new Out-Of-Memory handler.  The old handler is returned.  */
641441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf_OOM dwarf_new_oom_handler (Dwarf *dbg, Dwarf_OOM handler);
642441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
643441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
644441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Inline optimizations.  */
645441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#ifdef __OPTIMIZE__
646441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return attribute code of given attribute.  */
647cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng__libdw_extern_inline unsigned int
648441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectdwarf_whatattr (Dwarf_Attribute *attr)
649441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{
650441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  return attr == NULL ? 0 : attr->code;
651441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}
652441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
653441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return attribute code of given attribute.  */
654cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng__libdw_extern_inline unsigned int
655441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectdwarf_whatform (Dwarf_Attribute *attr)
656441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{
657441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project  return attr == NULL ? 0 : attr->form;
658441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}
659441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#endif	/* Optimize.  */
660441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project
661cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#ifdef __cplusplus
662cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng}
663cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#endif
664cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
665441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#endif	/* libdw.h */
666