rdwarf 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/.travis.yml +4 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +28 -0
  6. data/README.md +39 -0
  7. data/Rakefile +8 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +7 -0
  10. data/ext/rdwarf/depend +5 -0
  11. data/ext/rdwarf/extconf.rb +29 -0
  12. data/ext/rdwarf/libdwarf/CHANGES +102 -0
  13. data/ext/rdwarf/libdwarf/CODINGSTYLE +71 -0
  14. data/ext/rdwarf/libdwarf/COPYING +28 -0
  15. data/ext/rdwarf/libdwarf/ChangeLog +619 -0
  16. data/ext/rdwarf/libdwarf/ChangeLog2006 +835 -0
  17. data/ext/rdwarf/libdwarf/ChangeLog2007 +217 -0
  18. data/ext/rdwarf/libdwarf/ChangeLog2008 +263 -0
  19. data/ext/rdwarf/libdwarf/ChangeLog2009 +348 -0
  20. data/ext/rdwarf/libdwarf/ChangeLog2010 +175 -0
  21. data/ext/rdwarf/libdwarf/ChangeLog2011 +297 -0
  22. data/ext/rdwarf/libdwarf/ChangeLog2012 +131 -0
  23. data/ext/rdwarf/libdwarf/ChangeLog2013 +238 -0
  24. data/ext/rdwarf/libdwarf/ChangeLog2014 +399 -0
  25. data/ext/rdwarf/libdwarf/LGPL.txt +504 -0
  26. data/ext/rdwarf/libdwarf/LIBDWARFCOPYRIGHT +40 -0
  27. data/ext/rdwarf/libdwarf/Makefile.in +220 -0
  28. data/ext/rdwarf/libdwarf/NEWS +535 -0
  29. data/ext/rdwarf/libdwarf/README +235 -0
  30. data/ext/rdwarf/libdwarf/checkexamples.c +1179 -0
  31. data/ext/rdwarf/libdwarf/cmplrs/dwarf_addr_finder.h +55 -0
  32. data/ext/rdwarf/libdwarf/common.c +62 -0
  33. data/ext/rdwarf/libdwarf/common.h +38 -0
  34. data/ext/rdwarf/libdwarf/config.h.in +146 -0
  35. data/ext/rdwarf/libdwarf/configure +5581 -0
  36. data/ext/rdwarf/libdwarf/configure.in +167 -0
  37. data/ext/rdwarf/libdwarf/dw-linetableheader.txt +39 -0
  38. data/ext/rdwarf/libdwarf/dwarf.h +1342 -0
  39. data/ext/rdwarf/libdwarf/dwarf_abbrev.c +291 -0
  40. data/ext/rdwarf/libdwarf/dwarf_abbrev.h +45 -0
  41. data/ext/rdwarf/libdwarf/dwarf_addr_finder.c +676 -0
  42. data/ext/rdwarf/libdwarf/dwarf_alloc.c +685 -0
  43. data/ext/rdwarf/libdwarf/dwarf_alloc.h +38 -0
  44. data/ext/rdwarf/libdwarf/dwarf_arange.c +595 -0
  45. data/ext/rdwarf/libdwarf/dwarf_arange.h +62 -0
  46. data/ext/rdwarf/libdwarf/dwarf_base_types.h +157 -0
  47. data/ext/rdwarf/libdwarf/dwarf_die_deliv.c +1802 -0
  48. data/ext/rdwarf/libdwarf/dwarf_die_deliv.h +46 -0
  49. data/ext/rdwarf/libdwarf/dwarf_elf_access.c +1348 -0
  50. data/ext/rdwarf/libdwarf/dwarf_elf_access.h +46 -0
  51. data/ext/rdwarf/libdwarf/dwarf_error.c +492 -0
  52. data/ext/rdwarf/libdwarf/dwarf_error.h +53 -0
  53. data/ext/rdwarf/libdwarf/dwarf_form.c +1302 -0
  54. data/ext/rdwarf/libdwarf/dwarf_frame.c +2454 -0
  55. data/ext/rdwarf/libdwarf/dwarf_frame.h +418 -0
  56. data/ext/rdwarf/libdwarf/dwarf_frame2.c +1533 -0
  57. data/ext/rdwarf/libdwarf/dwarf_frame3.c +282 -0
  58. data/ext/rdwarf/libdwarf/dwarf_funcs.c +123 -0
  59. data/ext/rdwarf/libdwarf/dwarf_funcs.h +33 -0
  60. data/ext/rdwarf/libdwarf/dwarf_gdbindex.c +520 -0
  61. data/ext/rdwarf/libdwarf/dwarf_gdbindex.h +97 -0
  62. data/ext/rdwarf/libdwarf/dwarf_global.c +612 -0
  63. data/ext/rdwarf/libdwarf/dwarf_global.h +117 -0
  64. data/ext/rdwarf/libdwarf/dwarf_harmless.c +228 -0
  65. data/ext/rdwarf/libdwarf/dwarf_harmless.h +31 -0
  66. data/ext/rdwarf/libdwarf/dwarf_incl.h +61 -0
  67. data/ext/rdwarf/libdwarf/dwarf_init_finish.c +1263 -0
  68. data/ext/rdwarf/libdwarf/dwarf_leb.c +159 -0
  69. data/ext/rdwarf/libdwarf/dwarf_line.c +1822 -0
  70. data/ext/rdwarf/libdwarf/dwarf_line.h +446 -0
  71. data/ext/rdwarf/libdwarf/dwarf_line2.c +98 -0
  72. data/ext/rdwarf/libdwarf/dwarf_line_table_reader_common.c +1583 -0
  73. data/ext/rdwarf/libdwarf/dwarf_loc.c +1525 -0
  74. data/ext/rdwarf/libdwarf/dwarf_loc.h +149 -0
  75. data/ext/rdwarf/libdwarf/dwarf_loc2.c +833 -0
  76. data/ext/rdwarf/libdwarf/dwarf_macro.c +479 -0
  77. data/ext/rdwarf/libdwarf/dwarf_macro.h +35 -0
  78. data/ext/rdwarf/libdwarf/dwarf_opaque.h +778 -0
  79. data/ext/rdwarf/libdwarf/dwarf_original_elf_init.c +219 -0
  80. data/ext/rdwarf/libdwarf/dwarf_print_lines.c +631 -0
  81. data/ext/rdwarf/libdwarf/dwarf_pubtypes.c +132 -0
  82. data/ext/rdwarf/libdwarf/dwarf_query.c +1594 -0
  83. data/ext/rdwarf/libdwarf/dwarf_ranges.c +194 -0
  84. data/ext/rdwarf/libdwarf/dwarf_reloc_arm.h +308 -0
  85. data/ext/rdwarf/libdwarf/dwarf_reloc_mips.h +117 -0
  86. data/ext/rdwarf/libdwarf/dwarf_reloc_ppc.h +242 -0
  87. data/ext/rdwarf/libdwarf/dwarf_reloc_ppc64.h +272 -0
  88. data/ext/rdwarf/libdwarf/dwarf_reloc_x86_64.h +127 -0
  89. data/ext/rdwarf/libdwarf/dwarf_sort_line.c +665 -0
  90. data/ext/rdwarf/libdwarf/dwarf_string.c +82 -0
  91. data/ext/rdwarf/libdwarf/dwarf_stubs.c +38 -0
  92. data/ext/rdwarf/libdwarf/dwarf_tied.c +423 -0
  93. data/ext/rdwarf/libdwarf/dwarf_tsearch.h +125 -0
  94. data/ext/rdwarf/libdwarf/dwarf_tsearchhash.c +675 -0
  95. data/ext/rdwarf/libdwarf/dwarf_types.c +121 -0
  96. data/ext/rdwarf/libdwarf/dwarf_types.h +32 -0
  97. data/ext/rdwarf/libdwarf/dwarf_util.c +913 -0
  98. data/ext/rdwarf/libdwarf/dwarf_util.h +324 -0
  99. data/ext/rdwarf/libdwarf/dwarf_vars.c +125 -0
  100. data/ext/rdwarf/libdwarf/dwarf_vars.h +29 -0
  101. data/ext/rdwarf/libdwarf/dwarf_weaks.c +123 -0
  102. data/ext/rdwarf/libdwarf/dwarf_weaks.h +29 -0
  103. data/ext/rdwarf/libdwarf/dwarf_xu_index.c +579 -0
  104. data/ext/rdwarf/libdwarf/dwarf_xu_index.h +68 -0
  105. data/ext/rdwarf/libdwarf/dwgetopt.c +181 -0
  106. data/ext/rdwarf/libdwarf/dwgetopt.h +51 -0
  107. data/ext/rdwarf/libdwarf/gennames.c +531 -0
  108. data/ext/rdwarf/libdwarf/install.sh +119 -0
  109. data/ext/rdwarf/libdwarf/libdwarf.h.in +3746 -0
  110. data/ext/rdwarf/libdwarf/libdwarf2.1.mm +9805 -0
  111. data/ext/rdwarf/libdwarf/libdwarf2.1.pdf +0 -0
  112. data/ext/rdwarf/libdwarf/libdwarf2p.1.mm +2807 -0
  113. data/ext/rdwarf/libdwarf/libdwarf2p.1.pdf +0 -0
  114. data/ext/rdwarf/libdwarf/libdwarfdefs.h +81 -0
  115. data/ext/rdwarf/libdwarf/malloc_check.c +327 -0
  116. data/ext/rdwarf/libdwarf/malloc_check.h +52 -0
  117. data/ext/rdwarf/libdwarf/mips_extensions.mm +1266 -0
  118. data/ext/rdwarf/libdwarf/mips_extensions.pdf +0 -0
  119. data/ext/rdwarf/libdwarf/pro_alloc.c +179 -0
  120. data/ext/rdwarf/libdwarf/pro_alloc.h +33 -0
  121. data/ext/rdwarf/libdwarf/pro_arange.c +310 -0
  122. data/ext/rdwarf/libdwarf/pro_arange.h +51 -0
  123. data/ext/rdwarf/libdwarf/pro_die.c +431 -0
  124. data/ext/rdwarf/libdwarf/pro_die.h +59 -0
  125. data/ext/rdwarf/libdwarf/pro_encode_nm.c +108 -0
  126. data/ext/rdwarf/libdwarf/pro_encode_nm.h +39 -0
  127. data/ext/rdwarf/libdwarf/pro_error.c +96 -0
  128. data/ext/rdwarf/libdwarf/pro_error.h +43 -0
  129. data/ext/rdwarf/libdwarf/pro_expr.c +575 -0
  130. data/ext/rdwarf/libdwarf/pro_expr.h +36 -0
  131. data/ext/rdwarf/libdwarf/pro_finish.c +45 -0
  132. data/ext/rdwarf/libdwarf/pro_forms.c +1271 -0
  133. data/ext/rdwarf/libdwarf/pro_frame.c +572 -0
  134. data/ext/rdwarf/libdwarf/pro_frame.h +120 -0
  135. data/ext/rdwarf/libdwarf/pro_funcs.c +50 -0
  136. data/ext/rdwarf/libdwarf/pro_incl.h +91 -0
  137. data/ext/rdwarf/libdwarf/pro_init.c +327 -0
  138. data/ext/rdwarf/libdwarf/pro_line.c +373 -0
  139. data/ext/rdwarf/libdwarf/pro_line.h +112 -0
  140. data/ext/rdwarf/libdwarf/pro_macinfo.c +457 -0
  141. data/ext/rdwarf/libdwarf/pro_macinfo.h +31 -0
  142. data/ext/rdwarf/libdwarf/pro_opaque.h +513 -0
  143. data/ext/rdwarf/libdwarf/pro_pubnames.c +60 -0
  144. data/ext/rdwarf/libdwarf/pro_reloc.c +253 -0
  145. data/ext/rdwarf/libdwarf/pro_reloc.h +38 -0
  146. data/ext/rdwarf/libdwarf/pro_reloc_stream.c +256 -0
  147. data/ext/rdwarf/libdwarf/pro_reloc_stream.h +52 -0
  148. data/ext/rdwarf/libdwarf/pro_reloc_symbolic.c +245 -0
  149. data/ext/rdwarf/libdwarf/pro_reloc_symbolic.h +45 -0
  150. data/ext/rdwarf/libdwarf/pro_section.c +2233 -0
  151. data/ext/rdwarf/libdwarf/pro_section.h +100 -0
  152. data/ext/rdwarf/libdwarf/pro_types.c +274 -0
  153. data/ext/rdwarf/libdwarf/pro_types.h +34 -0
  154. data/ext/rdwarf/libdwarf/pro_util.h +38 -0
  155. data/ext/rdwarf/libdwarf/pro_vars.c +52 -0
  156. data/ext/rdwarf/libdwarf/pro_weaks.c +51 -0
  157. data/ext/rdwarf/rdwarf.c +765 -0
  158. data/ext/rdwarf/rdwarf.h +52 -0
  159. data/ext/rdwarf/rdwarf_names_gen.rb +109 -0
  160. data/lib/rdwarf.rb +181 -0
  161. data/lib/rdwarf/version.rb +3 -0
  162. data/rdwarf.gemspec +30 -0
  163. metadata +251 -0
@@ -0,0 +1,119 @@
1
+ #!/bin/sh
2
+
3
+ #
4
+ # install - install a program, script, or datafile
5
+ # This comes from X11R5; it is not part of GNU.
6
+ #
7
+ # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $
8
+ #
9
+ # This script is compatible with the BSD install script, but was written
10
+ # from scratch.
11
+ #
12
+
13
+
14
+ # set DOITPROG to echo to test this script
15
+
16
+ # Don't use :- since 4.3BSD and earlier shells don't like it.
17
+ doit="${DOITPROG-}"
18
+
19
+
20
+ # put in absolute paths if you don't have them in your path; or use env. vars.
21
+
22
+ mvprog="${MVPROG-mv}"
23
+ cpprog="${CPPROG-cp}"
24
+ chmodprog="${CHMODPROG-chmod}"
25
+ chownprog="${CHOWNPROG-chown}"
26
+ chgrpprog="${CHGRPPROG-chgrp}"
27
+ stripprog="${STRIPPROG-strip}"
28
+ rmprog="${RMPROG-rm}"
29
+
30
+ instcmd="$mvprog"
31
+ chmodcmd=""
32
+ chowncmd=""
33
+ chgrpcmd=""
34
+ stripcmd=""
35
+ rmcmd="$rmprog -f"
36
+ mvcmd="$mvprog"
37
+ src=""
38
+ dst=""
39
+
40
+ while [ x"$1" != x ]; do
41
+ case $1 in
42
+ -c) instcmd="$cpprog"
43
+ shift
44
+ continue;;
45
+
46
+ -m) chmodcmd="$chmodprog $2"
47
+ shift
48
+ shift
49
+ continue;;
50
+
51
+ -o) chowncmd="$chownprog $2"
52
+ shift
53
+ shift
54
+ continue;;
55
+
56
+ -g) chgrpcmd="$chgrpprog $2"
57
+ shift
58
+ shift
59
+ continue;;
60
+
61
+ -s) stripcmd="$stripprog"
62
+ shift
63
+ continue;;
64
+
65
+ *) if [ x"$src" = x ]
66
+ then
67
+ src=$1
68
+ else
69
+ dst=$1
70
+ fi
71
+ shift
72
+ continue;;
73
+ esac
74
+ done
75
+
76
+ if [ x"$src" = x ]
77
+ then
78
+ echo "install: no input file specified"
79
+ exit 1
80
+ fi
81
+
82
+ if [ x"$dst" = x ]
83
+ then
84
+ echo "install: no destination specified"
85
+ exit 1
86
+ fi
87
+
88
+
89
+ # If destination is a directory, append the input filename; if your system
90
+ # does not like double slashes in filenames, you may need to add some logic
91
+
92
+ if [ -d $dst ]
93
+ then
94
+ dst="$dst"/`basename $src`
95
+ fi
96
+
97
+ # Make a temp file name in the proper directory.
98
+
99
+ dstdir=`dirname $dst`
100
+ dsttmp=$dstdir/#inst.$$#
101
+
102
+ # Move or copy the file name to the temp name
103
+
104
+ $doit $instcmd $src $dsttmp
105
+
106
+ # and set any options; do chmod last to preserve setuid bits
107
+
108
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi
109
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi
110
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi
111
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi
112
+
113
+ # Now rename the file to the real destination.
114
+
115
+ $doit $rmcmd $dst
116
+ $doit $mvcmd $dsttmp $dst
117
+
118
+
119
+ exit 0
@@ -0,0 +1,3746 @@
1
+ /*
2
+
3
+ Copyright (C) 2000-2010 Silicon Graphics, Inc. All Rights Reserved.
4
+ Portions Copyright 2007-2010 Sun Microsystems, Inc. All rights reserved.
5
+ Portions Copyright 2008-2013 David Anderson. All rights reserved.
6
+ Portions Copyright 2008-2010 Arxan Technologies, Inc. All rights reserved.
7
+ Portions Copyright 2010-2012 SN Systems Ltd. All rights reserved.
8
+
9
+ This program is free software; you can redistribute it and/or modify it
10
+ under the terms of version 2.1 of the GNU Lesser General Public License
11
+ as published by the Free Software Foundation.
12
+
13
+ This program is distributed in the hope that it would be useful, but
14
+ WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16
+
17
+ Further, this software is distributed without any warranty that it is
18
+ free of the rightful claim of any third person regarding infringement
19
+ or the like. Any license provided herein, whether implied or
20
+ otherwise, applies only to this software file. Patent licenses, if
21
+ any, provided herein do not apply to combinations of this program with
22
+ other software, or any other product whatsoever.
23
+
24
+ You should have received a copy of the GNU Lesser General Public
25
+ License along with this program; if not, write the Free Software
26
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301,
27
+ USA.
28
+
29
+ */
30
+
31
+
32
+ #ifndef _LIBDWARF_H
33
+ #define _LIBDWARF_H
34
+ #ifdef __cplusplus
35
+ extern "C" {
36
+ #endif
37
+ /*
38
+ libdwarf.h
39
+ $Revision: #9 $ $Date: 2008/01/17 $
40
+
41
+ For libdwarf producers and consumers
42
+
43
+ The interface is defined as having 8-byte signed and unsigned
44
+ values so it can handle 64-or-32bit target on 64-or-32bit host.
45
+ Dwarf_Ptr is the native size: it represents pointers on
46
+ the host machine (not the target!).
47
+
48
+ This contains declarations for types and all producer
49
+ and consumer functions.
50
+
51
+ Function declarations are written on a single line each here
52
+ so one can use grep to each declaration in its entirety.
53
+ The declarations are a little harder to read this way, but...
54
+
55
+ The seeming duplication of the Elf typedef allows
56
+ both verification we have the right struct name (when
57
+ libelf.h included before this) and
58
+ creation of a local handle so we have the struct pointer
59
+ here (if libelf.h is not included before this file).
60
+
61
+ */
62
+
63
+ typedef struct Elf Elf;
64
+ typedef struct Elf* dwarf_elf_handle;
65
+
66
+ /* To enable printing with printf regardless of the
67
+ actual underlying data type, we define the DW_PR_xxx macros.
68
+ To ensure uses of DW_PR_DUx or DW_PR_DSx look the way you want
69
+ ensure the right DW_PR_XZEROS define is uncommented.
70
+ */
71
+ /*#define DW_PR_XZEROS "" */
72
+ #define DW_PR_XZEROS "08"
73
+ #if (_MIPS_SZLONG == 64)
74
+ /* Special case for MIPS, so -64 (LP64) build gets simple -long-.
75
+ Non-MIPS LP64 or ILP64 environments should probably ensure
76
+ _MIPS_SZLONG set to 64 everywhere this header is #included.
77
+ */
78
+ typedef int Dwarf_Bool; /* boolean type */
79
+ typedef unsigned long Dwarf_Off; /* 4 or 8 byte file offset */
80
+ typedef unsigned long Dwarf_Unsigned; /* 4 or 8 byte unsigned value */
81
+ typedef unsigned short Dwarf_Half; /* 2 byte unsigned value */
82
+ typedef unsigned char Dwarf_Small; /* 1 byte unsigned value */
83
+ typedef signed long Dwarf_Signed; /* 4 or 8 byte signed value */
84
+ typedef unsigned long Dwarf_Addr; /* target memory address */
85
+ #define DW_PR_DUx "lx"
86
+ #define DW_PR_DSx "lx"
87
+ #define DW_PR_DUu "lu"
88
+ #define DW_PR_DSd "ld"
89
+
90
+ #else /* 32-bit */
91
+ /* This is for ILP32, allowing i/o of 64bit dwarf info.
92
+ Also should be fine for LP64 and ILP64 cases.
93
+ */
94
+ typedef int Dwarf_Bool; /* boolean type */
95
+ typedef unsigned long long Dwarf_Off; /* 8 byte file offset */
96
+ typedef unsigned long long Dwarf_Unsigned; /* 8 byte unsigned value*/
97
+ typedef unsigned short Dwarf_Half; /* 2 byte unsigned value */
98
+ typedef unsigned char Dwarf_Small; /* 1 byte unsigned value */
99
+ typedef signed long long Dwarf_Signed; /* 8 byte signed value */
100
+ typedef unsigned long long Dwarf_Addr; /* target memory address */
101
+ #define DW_PR_DUx "llx"
102
+ #define DW_PR_DSx "llx"
103
+ #define DW_PR_DUu "llu"
104
+ #define DW_PR_DSd "lld"
105
+ #endif
106
+ #ifdef HAVE_NONSTANDARD_PRINTF_64_FORMAT
107
+ /* Windows does not use std C formatting, so allow it. */
108
+ #undef DW_PR_DUx
109
+ #undef DW_PR_DSx
110
+ #undef DW_PR_DUu
111
+ #undef DW_PR_DSd
112
+ #define DW_PR_DUx "I64x"
113
+ #define DW_PR_DSx "I64x"
114
+ #define DW_PR_DUu "I64u"
115
+ #define DW_PR_DSd "I64d"
116
+ #endif /* HAVE_NONSTANDARD_FORMAT */
117
+
118
+ typedef void* Dwarf_Ptr; /* host machine pointer */
119
+
120
+ /* Used for DW_FORM_ref_sig8 and DW_AT_dwo_id.
121
+ It is not a string, it
122
+ is 8 bytes of a signature one would use to find
123
+ a type unit. See dwarf_formsig8()
124
+
125
+ Sometimes it is used in calculations as
126
+ Dwarf_Unsigned, but that is hidden in libdwarf.
127
+ */
128
+ struct Dwarf_Sig8_s {
129
+ char signature[8];
130
+ };
131
+ typedef struct Dwarf_Sig8_s Dwarf_Sig8;
132
+
133
+ /* Contains info on an uninterpreted block of data
134
+ Used with certain frame information functions.
135
+ */
136
+ typedef struct {
137
+ Dwarf_Unsigned bl_len; /* length of block bl_data points at */
138
+ Dwarf_Ptr bl_data; /* uninterpreted data */
139
+
140
+ /* 0 if location description,
141
+ 1 if .debug_info loclist,
142
+ 2 if .debug_info.dwo split dwarf loclist. */
143
+ Dwarf_Small bl_from_loclist;
144
+
145
+ /* Section (not CU) offset which 'data' comes from. */
146
+ Dwarf_Unsigned bl_section_offset;
147
+ } Dwarf_Block;
148
+
149
+
150
+ /* NEW October 2015. */
151
+ /* Dwarf_Loc_c_s,Dwarf_Locdesc_c_s, and Dwarf_Loc_Head_c_s
152
+ are not defined publically. */
153
+ struct Dwarf_Loc_c_s;
154
+ typedef struct Dwarf_Loc_c_s * Dwarf_Loc_c;
155
+
156
+ /* NEW October 2015. */
157
+ /* This provides access to Dwarf_Loc_c, a single location operator */
158
+ struct Dwarf_Locdesc_c_s;
159
+ typedef struct Dwarf_Locdesc_c_s * Dwarf_Locdesc_c;
160
+
161
+ /* NEW October 2015. */
162
+ /* This provides access to Dwarf_Locdesc_c, a single
163
+ location list entry (or for a locexpr, the fake
164
+ Loc_Head for the locexpr) */
165
+ struct Dwarf_Loc_Head_c_s;
166
+ typedef struct Dwarf_Loc_Head_c_s * Dwarf_Loc_Head_c;
167
+
168
+
169
+ /* Location record. Records up to 2 operand values.
170
+ Not usable with DWARF5 or DWARF4 with location
171
+ operator extensions. */
172
+ typedef struct {
173
+ Dwarf_Small lr_atom; /* location operation */
174
+ Dwarf_Unsigned lr_number; /* operand */
175
+ Dwarf_Unsigned lr_number2; /* for OP_BREGx and DW_OP_GNU_const_type*/
176
+ Dwarf_Unsigned lr_offset; /* offset in locexpr for OP_BRA etc */
177
+ } Dwarf_Loc;
178
+
179
+
180
+ /* Location description. DWARF 2,3,4.
181
+ When this is from a split-dwarf loclist (.debug_loc.dwo)
182
+ and no tied object is present
183
+ then ld_lowpc and ld_highpc are actually indices in
184
+ the .debug_addr section of the tied object).
185
+ If there is a tied object then these fields are actuall
186
+ addresses and DW_AT_addr_base in the skeleton CU DIE applies to
187
+ that .debug_addr.
188
+
189
+ Location record. Records up to 2 operand values.
190
+ Not usable with DWARF5 or DWARF4 with extensions.
191
+
192
+ If from DWARF2,3,4 non-split dwarf then things operate as
193
+ in DWARF2.
194
+ See dwarf_get_loclist_b() and the other related
195
+ new functions that
196
+ avoid using public structures Dwarf_Loc and Dwarf_Locdesc.
197
+ */
198
+ typedef struct {
199
+ /* Beginning of active range. This is actually an offset
200
+ of an applicable base address, not a pc value. */
201
+ Dwarf_Addr ld_lopc;
202
+
203
+ /* End of active range. This is actually an offset
204
+ of an applicable base address, not a pc value. */
205
+ Dwarf_Addr ld_hipc;
206
+
207
+ Dwarf_Half ld_cents; /* count of location records */
208
+ Dwarf_Loc* ld_s; /* pointer to list of same */
209
+
210
+ /* non-0 if loclist, 1 if non-split (dwarf 2,3,4) */
211
+ Dwarf_Small ld_from_loclist;
212
+
213
+ Dwarf_Unsigned ld_section_offset; /* Section (not CU) offset
214
+ where loc-expr begins*/
215
+ } Dwarf_Locdesc;
216
+
217
+ /* First appears in DWARF3.
218
+ The dwr_addr1/addr2 data is either an offset (DW_RANGES_ENTRY)
219
+ or an address (dwr_addr2 in DW_RANGES_ADDRESS_SELECTION) or
220
+ both are zero (DW_RANGES_END).
221
+ */
222
+ enum Dwarf_Ranges_Entry_Type { DW_RANGES_ENTRY,
223
+ DW_RANGES_ADDRESS_SELECTION,
224
+ DW_RANGES_END
225
+ };
226
+ typedef struct {
227
+ Dwarf_Addr dwr_addr1;
228
+ Dwarf_Addr dwr_addr2;
229
+ enum Dwarf_Ranges_Entry_Type dwr_type;
230
+ } Dwarf_Ranges;
231
+
232
+ /* Frame description instructions expanded.
233
+ */
234
+ typedef struct {
235
+ Dwarf_Small fp_base_op;
236
+ Dwarf_Small fp_extended_op;
237
+ Dwarf_Half fp_register;
238
+
239
+ /* Value may be signed, depends on op.
240
+ Any applicable data_alignment_factor has
241
+ not been applied, this is the raw offset. */
242
+ Dwarf_Unsigned fp_offset;
243
+ Dwarf_Off fp_instr_offset;
244
+ } Dwarf_Frame_Op; /* DWARF2 */
245
+
246
+ typedef struct {
247
+ Dwarf_Small fp_base_op;
248
+ Dwarf_Small fp_extended_op;
249
+ Dwarf_Half fp_register;
250
+
251
+ /* Value may be signed, depends on op.
252
+ Any applicable data_alignment_factor has
253
+ not been applied, this is the raw offset. */
254
+ Dwarf_Unsigned fp_offset_or_block_len;
255
+ Dwarf_Small *fp_expr_block;
256
+
257
+ Dwarf_Off fp_instr_offset;
258
+ } Dwarf_Frame_Op3; /* DWARF3 and DWARF2 compatible */
259
+
260
+ /* ***IMPORTANT NOTE, TARGET DEPENDENCY ****
261
+ DW_REG_TABLE_SIZE must be at least as large as
262
+ the number of registers
263
+ (DW_FRAME_LAST_REG_NUM) as defined in dwarf.h
264
+ Preferably identical to DW_FRAME_LAST_REG_NUM.
265
+ Ensure [0-DW_REG_TABLE_SIZE] does not overlap
266
+ DW_FRAME_UNDEFINED_VAL or DW_FRAME_SAME_VAL.
267
+ Also ensure DW_FRAME_REG_INITIAL_VALUE is set to what
268
+ is appropriate to your cpu.
269
+ For various CPUs DW_FRAME_UNDEFINED_VAL is correct
270
+ as the value for DW_FRAME_REG_INITIAL_VALUE.
271
+
272
+ For consumer apps, this can be set dynamically: see
273
+ dwarf_set_frame_rule_table_size(); */
274
+ #ifndef DW_REG_TABLE_SIZE
275
+ #define DW_REG_TABLE_SIZE 66
276
+ #endif
277
+
278
+ /* For MIPS, DW_FRAME_SAME_VAL is the correct default value
279
+ for a frame register value. For other CPUS another value
280
+ may be better, such as DW_FRAME_UNDEFINED_VAL.
281
+ See dwarf_set_frame_rule_table_size
282
+ */
283
+ #ifndef DW_FRAME_REG_INITIAL_VALUE
284
+ #define DW_FRAME_REG_INITIAL_VALUE DW_FRAME_SAME_VAL
285
+ #endif
286
+
287
+ /* Taken as meaning 'undefined value', this is not
288
+ a column or register number.
289
+ Only present at libdwarf runtime in the consumer
290
+ interfaces. Never on disk.
291
+ DW_FRAME_* Values present on disk are in dwarf.h
292
+ Ensure this is > DW_REG_TABLE_SIZE (the reg table
293
+ size is changeable at runtime with the *reg3() interfaces,
294
+ and this value must be greater than the reg table size).
295
+ */
296
+ #define DW_FRAME_UNDEFINED_VAL 1034
297
+
298
+ /* Taken as meaning 'same value' as caller had, not a column
299
+ or register number.
300
+ Only present at libdwarf runtime in the consumer
301
+ interfaces. Never on disk.
302
+ DW_FRAME_* Values present on disk are in dwarf.h
303
+ Ensure this is > DW_REG_TABLE_SIZE (the reg table
304
+ size is changeable at runtime with the *reg3() interfaces,
305
+ and this value must be greater than the reg table size).
306
+ */
307
+ #define DW_FRAME_SAME_VAL 1035
308
+
309
+ /* For DWARF3 consumer interfaces, make the CFA a column with no
310
+ real table number. This is what should have been done
311
+ for the DWARF2 interfaces. This actually works for
312
+ both DWARF2 and DWARF3, but see the libdwarf documentation
313
+ on Dwarf_Regtable3 and dwarf_get_fde_info_for_reg3()
314
+ and dwarf_get_fde_info_for_all_regs3()
315
+ Do NOT use this with the older dwarf_get_fde_info_for_reg()
316
+ or dwarf_get_fde_info_for_all_regs() consumer interfaces.
317
+ Must be higher than any register count for *any* ABI
318
+ (ensures maximum applicability with minimum effort).
319
+ Ensure this is > DW_REG_TABLE_SIZE (the reg table
320
+ size is changeable at runtime with the *reg3() interfaces,
321
+ and this value must be greater than the reg table size).
322
+ Only present at libdwarf runtime in the consumer
323
+ interfaces. Never on disk.
324
+ */
325
+ #define DW_FRAME_CFA_COL3 1436
326
+
327
+ /* The following are all needed to evaluate DWARF3 register rules.
328
+ */
329
+ #define DW_EXPR_OFFSET 0 /* DWARF2 only sees this. */
330
+ #define DW_EXPR_VAL_OFFSET 1
331
+ #define DW_EXPR_EXPRESSION 2
332
+ #define DW_EXPR_VAL_EXPRESSION 3
333
+
334
+ typedef struct Dwarf_Regtable_Entry_s {
335
+ /* For each index i (naming a hardware register with dwarf number
336
+ i) the following is true and defines the value of that register:
337
+
338
+ If dw_regnum is Register DW_FRAME_UNDEFINED_VAL
339
+ it is not DWARF register number but
340
+ a place holder indicating the register has no defined value.
341
+ If dw_regnum is Register DW_FRAME_SAME_VAL
342
+ it is not DWARF register number but
343
+ a place holder indicating the register has the same
344
+ value in the previous frame.
345
+
346
+ DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL are
347
+ only present at libdwarf runtime. Never on disk.
348
+ DW_FRAME_* Values present on disk are in dwarf.h
349
+
350
+ Otherwise: the register number is a DWARF register number
351
+ (see ABI documents for how this translates to hardware/
352
+ software register numbers in the machine hardware)
353
+ and the following applies:
354
+
355
+ if dw_value_type == DW_EXPR_OFFSET (the only case for dwarf2):
356
+ If dw_offset_relevant is non-zero, then
357
+ the value is stored at at the address CFA+N where
358
+ N is a signed offset.
359
+ Rule: Offset(N)
360
+ If dw_offset_relevant is zero, then the value of the register
361
+ is the value of (DWARF) register number dw_regnum.
362
+ Rule: register(F)
363
+ Other values of dw_value_type are an error.
364
+ */
365
+ Dwarf_Small dw_offset_relevant;
366
+
367
+ /* For DWARF2, always 0 */
368
+ Dwarf_Small dw_value_type;
369
+
370
+ Dwarf_Half dw_regnum;
371
+
372
+ /* The data type here should the larger of Dwarf_Addr
373
+ and Dwarf_Unsigned and Dwarf_Signed. */
374
+ Dwarf_Addr dw_offset;
375
+ } Dwarf_Regtable_Entry;
376
+
377
+ typedef struct Dwarf_Regtable_s {
378
+ struct Dwarf_Regtable_Entry_s rules[DW_REG_TABLE_SIZE];
379
+ } Dwarf_Regtable;
380
+
381
+ /* opaque type. Functional interface shown later. */
382
+ struct Dwarf_Reg_value3_s;
383
+ typedef struct Dwarf_Reg_value3_s Dwarf_Reg_Value3;
384
+
385
+ typedef struct Dwarf_Regtable_Entry3_s {
386
+ /* For each index i (naming a hardware register with dwarf number
387
+ i) the following is true and defines the value of that register:
388
+
389
+ If dw_regnum is Register DW_FRAME_UNDEFINED_VAL
390
+ it is not DWARF register number but
391
+ a place holder indicating the register has no defined value.
392
+ If dw_regnum is Register DW_FRAME_SAME_VAL
393
+ it is not DWARF register number but
394
+ a place holder indicating the register has the same
395
+ value in the previous frame.
396
+
397
+ DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL and
398
+ DW_FRAME_CFA_COL3 are only present at libdwarf runtime.
399
+ Never on disk.
400
+ DW_FRAME_* Values present on disk are in dwarf.h
401
+ Because DW_FRAME_SAME_VAL and DW_FRAME_UNDEFINED_VAL
402
+ and DW_FRAME_CFA_COL3 are definable at runtime
403
+ consider the names symbolic in this comment, not absolute.
404
+
405
+ Otherwise: the register number is a DWARF register number
406
+ (see ABI documents for how this translates to hardware/
407
+ software register numbers in the machine hardware)
408
+ and the following applies:
409
+
410
+ In a cfa-defining entry (rt3_cfa_rule) the regnum is the
411
+ CFA 'register number'. Which is some 'normal' register,
412
+ not DW_FRAME_CFA_COL3, nor DW_FRAME_SAME_VAL, nor
413
+ DW_FRAME_UNDEFINED_VAL.
414
+
415
+ If dw_value_type == DW_EXPR_OFFSET (the only possible case for
416
+ dwarf2):
417
+ If dw_offset_relevant is non-zero, then
418
+ the value is stored at at the address
419
+ CFA+N where N is a signed offset.
420
+ dw_regnum is the cfa register rule which means
421
+ one ignores dw_regnum and uses the CFA appropriately.
422
+ So dw_offset_or_block_len is a signed value, really,
423
+ and must be printed/evaluated as such.
424
+ Rule: Offset(N)
425
+ If dw_offset_relevant is zero, then the value of the register
426
+ is the value of (DWARF) register number dw_regnum.
427
+ Rule: register(R)
428
+ If dw_value_type == DW_EXPR_VAL_OFFSET
429
+ the value of this register is CFA +N where N is a signed offset.
430
+ dw_regnum is the cfa register rule which means
431
+ one ignores dw_regnum and uses the CFA appropriately.
432
+ Rule: val_offset(N)
433
+ If dw_value_type == DW_EXPR_EXPRESSION
434
+ The value of the register is the value at the address
435
+ computed by evaluating the DWARF expression E.
436
+ Rule: expression(E)
437
+ The expression E byte stream is pointed to by dw_block_ptr.
438
+ The expression length in bytes is given by
439
+ dw_offset_or_block_len.
440
+ If dw_value_type == DW_EXPR_VAL_EXPRESSION
441
+ The value of the register is the value
442
+ computed by evaluating the DWARF expression E.
443
+ Rule: val_expression(E)
444
+ The expression E byte stream is pointed to by dw_block_ptr.
445
+ The expression length in bytes is given by
446
+ dw_offset_or_block_len.
447
+ Other values of dw_value_type are an error.
448
+ */
449
+ Dwarf_Small dw_offset_relevant;
450
+ Dwarf_Small dw_value_type;
451
+ Dwarf_Half dw_regnum;
452
+ Dwarf_Unsigned dw_offset_or_block_len;
453
+ Dwarf_Ptr dw_block_ptr;
454
+
455
+ }Dwarf_Regtable_Entry3;
456
+
457
+ /* For the DWARF3 version, moved the DW_FRAME_CFA_COL
458
+ out of the array and into its own struct.
459
+ Having it part of the array is not very easy to work
460
+ with from a portability point of view: changing
461
+ the number for every architecture is a pain (if one fails
462
+ to set it correctly a register rule gets clobbered when
463
+ setting CFA). With MIPS it just happened to be easy to use
464
+ DW_FRAME_CFA_COL (it was wrong conceptually but it was easy...).
465
+
466
+ rt3_rules and rt3_reg_table_size must be filled in before
467
+ calling libdwarf. Filled in with a pointer to an array
468
+ (pointer and array set up by the calling application)
469
+ of rt3_reg_table_size Dwarf_Regtable_Entry3_s structs.
470
+ libdwarf does not allocate or deallocate space for the
471
+ rules, you must do so. libdwarf will initialize the
472
+ contents rules array, you do not need to do so (though
473
+ if you choose to initialize the array somehow that is ok:
474
+ libdwarf will overwrite your initializations with its own).
475
+
476
+ */
477
+ typedef struct Dwarf_Regtable3_s {
478
+ struct Dwarf_Regtable_Entry3_s rt3_cfa_rule;
479
+
480
+ Dwarf_Half rt3_reg_table_size;
481
+ struct Dwarf_Regtable_Entry3_s * rt3_rules;
482
+ } Dwarf_Regtable3;
483
+
484
+
485
+ /* Use for DW_EPXR_STANDARD., DW_EXPR_VAL_OFFSET.
486
+ Returns DW_DLV_OK if the value is available.
487
+ If DW_DLV_OK returns the regnum and offset thru the pointers
488
+ (which the consumer must use appropriately).
489
+ */
490
+ int dwarf_frame_get_reg_register(struct Dwarf_Regtable_Entry3_s *reg_in,
491
+ Dwarf_Small *offset_relevant,
492
+ Dwarf_Half *regnum_out,
493
+ Dwarf_Signed *offset_out);
494
+
495
+ /* Use for DW_EXPR_EXPRESSION, DW_EXPR_VAL_EXPRESSION.
496
+ Returns DW_DLV_OK if the value is available.
497
+ The caller must pass in the address of a valid
498
+ Dwarf_Block (the caller need not initialize it).
499
+ */
500
+ int dwarf_frame_get_reg_expression(struct Dwarf_Regtable_Entry3_s *reg_in,
501
+ Dwarf_Block *block_out);
502
+
503
+
504
+ /* For DW_DLC_SYMBOLIC_RELOCATIONS output to caller
505
+ v2, adding drd_length: some relocations are 4 and
506
+ some 8 bytes (pointers are 8, section offsets 4) in
507
+ some dwarf environments. (MIPS relocations are all one
508
+ size in any given ABI.) Changing drd_type to an unsigned char
509
+ to keep struct size down.
510
+ */
511
+ enum Dwarf_Rel_Type {
512
+ dwarf_drt_none, /* Should not get to caller */
513
+ dwarf_drt_data_reloc, /* Simple normal relocation. */
514
+ dwarf_drt_segment_rel, /* Special reloc, exceptions. */
515
+ /* dwarf_drt_first_of_length_pair and drt_second
516
+ are for for the .word end - begin case. */
517
+ dwarf_drt_first_of_length_pair,
518
+ dwarf_drt_second_of_length_pair
519
+ };
520
+
521
+ typedef struct Dwarf_P_Marker_s * Dwarf_P_Marker;
522
+ struct Dwarf_P_Marker_s {
523
+ Dwarf_Unsigned ma_marker;
524
+ Dwarf_Unsigned ma_offset;
525
+ };
526
+
527
+ typedef struct Dwarf_Relocation_Data_s * Dwarf_Relocation_Data;
528
+ struct Dwarf_Relocation_Data_s {
529
+ unsigned char drd_type; /* Cast to/from Dwarf_Rel_Type
530
+ to keep size small in struct. */
531
+ unsigned char drd_length; /* Length in bytes of data being
532
+ relocated. 4 for 32bit data,
533
+ 8 for 64bit data. */
534
+ Dwarf_Unsigned drd_offset; /* Where the data to reloc is. */
535
+ Dwarf_Unsigned drd_symbol_index;
536
+ };
537
+
538
+ typedef struct Dwarf_P_String_Attr_s * Dwarf_P_String_Attr;
539
+ struct Dwarf_P_String_Attr_s {
540
+ Dwarf_Unsigned sa_offset; /* Offset of string attribute data */
541
+ Dwarf_Unsigned sa_nbytes;
542
+ };
543
+
544
+
545
+ /* Opaque types for Consumer Library. */
546
+ typedef struct Dwarf_Debug_s* Dwarf_Debug;
547
+ typedef struct Dwarf_Die_s* Dwarf_Die;
548
+ typedef struct Dwarf_Line_s* Dwarf_Line;
549
+ typedef struct Dwarf_Global_s* Dwarf_Global;
550
+ typedef struct Dwarf_Func_s* Dwarf_Func;
551
+ typedef struct Dwarf_Type_s* Dwarf_Type;
552
+ typedef struct Dwarf_Var_s* Dwarf_Var;
553
+ typedef struct Dwarf_Weak_s* Dwarf_Weak;
554
+ typedef struct Dwarf_Error_s* Dwarf_Error;
555
+ typedef struct Dwarf_Attribute_s* Dwarf_Attribute;
556
+ typedef struct Dwarf_Abbrev_s* Dwarf_Abbrev;
557
+ typedef struct Dwarf_Fde_s* Dwarf_Fde;
558
+ typedef struct Dwarf_Cie_s* Dwarf_Cie;
559
+ typedef struct Dwarf_Arange_s* Dwarf_Arange;
560
+ typedef struct Dwarf_Gdbindex_s* Dwarf_Gdbindex;
561
+ struct Dwarf_Xu_Index_Header_s;
562
+ typedef struct Dwarf_Xu_Index_Header_s* Dwarf_Xu_Index_Header;
563
+ struct Dwarf_Line_Context_s;
564
+ typedef struct Dwarf_Line_Context_s *Dwarf_Line_Context;
565
+
566
+
567
+ /* Opaque types for Producer Library. */
568
+ typedef struct Dwarf_P_Debug_s* Dwarf_P_Debug;
569
+ typedef struct Dwarf_P_Die_s* Dwarf_P_Die;
570
+ typedef struct Dwarf_P_Attribute_s* Dwarf_P_Attribute;
571
+ typedef struct Dwarf_P_Fde_s* Dwarf_P_Fde;
572
+ typedef struct Dwarf_P_Expr_s* Dwarf_P_Expr;
573
+ typedef Dwarf_Unsigned Dwarf_Tag;
574
+
575
+
576
+ /* error handler function
577
+ */
578
+ typedef void (*Dwarf_Handler)(Dwarf_Error /*error*/, Dwarf_Ptr /*errarg*/);
579
+
580
+
581
+ /* Begin libdwarf Object File Interface declarations.
582
+
583
+ As of February 2008 there are multiple dwarf_reader object access
584
+ initialization methods available:
585
+ The traditional dwarf_elf_init() and dwarf_init() and dwarf_finish()
586
+ which assume libelf and POSIX file access.
587
+ An object-file and library agnostic dwarf_object_init() and dwarf_object_finish()
588
+ which allow the coder to provide object access routines
589
+ abstracting away the elf interface. So there is no dependence in the
590
+ reader code on the object format and no dependence on libelf.
591
+ See the code in dwarf_elf_access.c and dwarf_original_elf_init.c
592
+ to see an example of initializing the structures mentioned below.
593
+
594
+ Projects using dwarf_elf_init() or dwarf_init() can ignore
595
+ the Dwarf_Obj_Access* structures entirely as all these details
596
+ are completed for you.
597
+
598
+ */
599
+
600
+ typedef struct Dwarf_Obj_Access_Interface_s Dwarf_Obj_Access_Interface;
601
+ typedef struct Dwarf_Obj_Access_Methods_s Dwarf_Obj_Access_Methods;
602
+ typedef struct Dwarf_Obj_Access_Section_s Dwarf_Obj_Access_Section;
603
+
604
+
605
+ /* Used in the get_section interface function
606
+ in Dwarf_Obj_Access_Section_s. Since libdwarf
607
+ depends on standard DWARF section names an object
608
+ format that has no such names (but has some
609
+ method of setting up 'sections equivalents')
610
+ must arrange to return standard DWARF section
611
+ names in the 'name' field. libdwarf does
612
+ not free the strings in 'name'. */
613
+ struct Dwarf_Obj_Access_Section_s {
614
+ /* addr is the virtual address of the first byte of
615
+ the section data. Usually zero when the address
616
+ makes no sense for a given section. */
617
+ Dwarf_Addr addr;
618
+
619
+ /* Section type. */
620
+ Dwarf_Unsigned type;
621
+
622
+ /* Size in bytes of the section. */
623
+ Dwarf_Unsigned size;
624
+
625
+ /* Having an accurate section name makes debugging of libdwarf easier.
626
+ and is essential to find the .debug_ sections. */
627
+ const char* name;
628
+ /* Set link to zero if it is meaningless. If non-zero
629
+ it should be a link to a rela section or from symtab
630
+ to strtab. In Elf it is sh_link. */
631
+ Dwarf_Unsigned link;
632
+
633
+ /* The section header index of the section to which the
634
+ relocation applies. In Elf it is sh_info. */
635
+ Dwarf_Unsigned info;
636
+
637
+ /* Elf sections that are tables have a non-zero entrysize so
638
+ the count of entries can be calculated even without
639
+ the right structure definition. If your object format
640
+ does not have this data leave this zero. */
641
+ Dwarf_Unsigned entrysize;
642
+ };
643
+
644
+ /* Returned by the get_endianness function in
645
+ Dwarf_Obj_Access_Methods_s. */
646
+ typedef enum {
647
+ DW_OBJECT_MSB,
648
+ DW_OBJECT_LSB
649
+ } Dwarf_Endianness;
650
+
651
+ /* The functions we need to access object data from libdwarf are declared here.
652
+
653
+ In these function pointer declarations
654
+ 'void *obj' is intended to be a pointer (the object field in
655
+ Dwarf_Obj_Access_Interface_s)
656
+ that hides the library-specific and object-specific data that makes
657
+ it possible to handle multiple object formats and multiple libraries.
658
+ It's not required that one handles multiple such in a single libdwarf
659
+ archive/shared-library (but not ruled out either).
660
+ See dwarf_elf_object_access_internals_t and dwarf_elf_access.c
661
+ for an example.
662
+
663
+ */
664
+ struct Dwarf_Obj_Access_Methods_s {
665
+ /*
666
+ get_section_info
667
+
668
+ Get address, size, and name info about a section.
669
+
670
+ Parameters
671
+ section_index - Zero-based index.
672
+ return_section - Pointer to a structure in which section info
673
+ will be placed. Caller must provide a valid pointer to a
674
+ structure area. The structure's contents will be overwritten
675
+ by the call to get_section_info.
676
+ error - A pointer to an integer in which an error code may be stored.
677
+
678
+ Return
679
+ DW_DLV_OK - Everything ok.
680
+ DW_DLV_ERROR - Error occurred. Use 'error' to determine the
681
+ libdwarf defined error.
682
+ DW_DLV_NO_ENTRY - No such section. */
683
+ int (*get_section_info)(void* obj, Dwarf_Half section_index,
684
+ Dwarf_Obj_Access_Section* return_section, int* error);
685
+ /*
686
+ get_byte_order
687
+
688
+ Get whether the object file represented by this interface is big-endian
689
+ (DW_OBJECT_MSB) or little endian (DW_OBJECT_LSB).
690
+
691
+ Parameters
692
+ obj - Equivalent to 'this' in OO languages.
693
+
694
+ Return
695
+ Endianness of object. Cannot fail. */
696
+ Dwarf_Endianness (*get_byte_order)(void* obj);
697
+ /*
698
+ get_length_size
699
+
700
+ Get the size of a length field in the underlying object file.
701
+ libdwarf currently supports * 4 and 8 byte sizes, but may
702
+ support larger in the future.
703
+ Perhaps the return type should be an enumeration?
704
+
705
+ Parameters
706
+ obj - Equivalent to 'this' in OO languages.
707
+
708
+ Return
709
+ Size of length. Cannot fail. */
710
+ Dwarf_Small (*get_length_size)(void* obj);
711
+ /*
712
+ get_pointer_size
713
+
714
+ Get the size of a pointer field in the underlying object file.
715
+ libdwarf currently supports 4 and 8 byte sizes.
716
+ Perhaps the return type should be an enumeration?
717
+
718
+ Return
719
+ Size of pointer. Cannot fail. */
720
+ Dwarf_Small (*get_pointer_size)(void* obj);
721
+ /*
722
+ get_section_count
723
+
724
+ Get the number of sections in the object file.
725
+
726
+ Parameters
727
+
728
+ Return
729
+ Number of sections */
730
+ Dwarf_Unsigned (*get_section_count)(void* obj);
731
+ /*
732
+ load_section
733
+
734
+ Get a pointer to an array of bytes that represent the section.
735
+
736
+ Parameters
737
+ section_index - Zero-based index.
738
+ return_data - The address of a pointer to which the section data block
739
+ will be assigned.
740
+ error - Pointer to an integer for returning libdwarf-defined
741
+ error numbers.
742
+
743
+ Return
744
+ DW_DLV_OK - No error.
745
+ DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined
746
+ error number.
747
+ DW_DLV_NO_ENTRY - No such section. */
748
+ int (*load_section)(void* obj, Dwarf_Half section_index,
749
+ Dwarf_Small** return_data, int* error);
750
+
751
+ /**
752
+ relocate_a_section
753
+ If relocations are not supported leave this pointer NULL.
754
+
755
+ Get a pointer to an array of bytes that represent the section.
756
+
757
+ Parameters
758
+ section_index - Zero-based index of the section to be relocated.
759
+ error - Pointer to an integer for returning libdwarf-defined
760
+ error numbers.
761
+
762
+ Return
763
+ DW_DLV_OK - No error.
764
+ DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined
765
+ error number.
766
+ DW_DLV_NO_ENTRY - No such section. */
767
+ int (*relocate_a_section)(void* obj, Dwarf_Half section_index,
768
+ Dwarf_Debug dbg,
769
+ int* error);
770
+
771
+ };
772
+
773
+
774
+
775
+ /* These structures are allocated and deallocated by your code
776
+ when you are using the libdwarf Object File Interface
777
+ [dwarf_object_init() and dwarf_object_finish()] directly.
778
+ dwarf_object_finish() does not free
779
+ struct Dwarf_Obj_Access_Interface_s or its content.
780
+ (libdwarf does record a pointer to this struct: you must
781
+ ensure that pointer remains valid for as long as
782
+ a libdwarf instance is open (meaning
783
+ after dwarf_init() and before dwarf_finish()).
784
+
785
+ If you are reading Elf objects and libelf use dwarf_init()
786
+ or dwarf_elf_init() which take care of these details.
787
+ */
788
+ struct Dwarf_Obj_Access_Interface_s {
789
+ /* object is a void* as it hides the data the object access routines
790
+ need (which varies by library in use and object format).
791
+ */
792
+ void* object;
793
+ const Dwarf_Obj_Access_Methods * methods;
794
+ };
795
+
796
+ /* End libdwarf Object File Interface */
797
+
798
+ /*
799
+ Dwarf_dealloc() alloc_type arguments.
800
+ Argument points to:
801
+ */
802
+ #define DW_DLA_STRING 0x01 /* char* */
803
+ #define DW_DLA_LOC 0x02 /* Dwarf_Loc */
804
+ #define DW_DLA_LOCDESC 0x03 /* Dwarf_Locdesc */
805
+ #define DW_DLA_ELLIST 0x04 /* Dwarf_Ellist (not used)*/
806
+ #define DW_DLA_BOUNDS 0x05 /* Dwarf_Bounds (not used) */
807
+ #define DW_DLA_BLOCK 0x06 /* Dwarf_Block */
808
+ #define DW_DLA_DEBUG 0x07 /* Dwarf_Debug */
809
+ #define DW_DLA_DIE 0x08 /* Dwarf_Die */
810
+ #define DW_DLA_LINE 0x09 /* Dwarf_Line */
811
+ #define DW_DLA_ATTR 0x0a /* Dwarf_Attribute */
812
+ #define DW_DLA_TYPE 0x0b /* Dwarf_Type (not used) */
813
+ #define DW_DLA_SUBSCR 0x0c /* Dwarf_Subscr (not used) */
814
+ #define DW_DLA_GLOBAL 0x0d /* Dwarf_Global */
815
+ #define DW_DLA_ERROR 0x0e /* Dwarf_Error */
816
+ #define DW_DLA_LIST 0x0f /* a list */
817
+ #define DW_DLA_LINEBUF 0x10 /* Dwarf_Line* (not used) */
818
+ #define DW_DLA_ARANGE 0x11 /* Dwarf_Arange */
819
+ #define DW_DLA_ABBREV 0x12 /* Dwarf_Abbrev */
820
+ #define DW_DLA_FRAME_OP 0x13 /* Dwarf_Frame_Op */
821
+ #define DW_DLA_CIE 0x14 /* Dwarf_Cie */
822
+ #define DW_DLA_FDE 0x15 /* Dwarf_Fde */
823
+ #define DW_DLA_LOC_BLOCK 0x16 /* Dwarf_Loc */
824
+ #define DW_DLA_FRAME_BLOCK 0x17 /* Dwarf_Frame Block (not used) */
825
+ #define DW_DLA_FUNC 0x18 /* Dwarf_Func */
826
+ #define DW_DLA_TYPENAME 0x19 /* Dwarf_Type */
827
+ #define DW_DLA_VAR 0x1a /* Dwarf_Var */
828
+ #define DW_DLA_WEAK 0x1b /* Dwarf_Weak */
829
+ #define DW_DLA_ADDR 0x1c /* Dwarf_Addr sized entries */
830
+ #define DW_DLA_RANGES 0x1d /* Dwarf_Ranges */
831
+
832
+ /* 0x1e (30) to 0x36 (54) reserved for internal to libdwarf types. */
833
+
834
+ #define DW_DLA_GDBINDEX 0x37 /* Dwarf_Gdbindex */
835
+ #define DW_DLA_XU_INDEX 0x38 /* Dwarf_Xu_Index_Header */
836
+ #define DW_DLA_LOC_BLOCK_C 0x39 /* Dwarf_Loc_c*/
837
+ #define DW_DLA_LOCDESC_C 0x3a /* Dwarf_Locdesc_c */
838
+ #define DW_DLA_LOC_HEAD_C 0x3b /* Dwarf_Loc_Head_c */
839
+
840
+ /* The augmenter string for CIE */
841
+ #define DW_CIE_AUGMENTER_STRING_V0 "z"
842
+
843
+ /* dwarf_init() access arguments
844
+ */
845
+ #define DW_DLC_READ 0 /* read only access */
846
+ #define DW_DLC_WRITE 1 /* write only access */
847
+ #define DW_DLC_RDWR 2 /* read/write access NOT SUPPORTED*/
848
+
849
+ /* dwarf_producer_init*() access flag modifiers
850
+ No longer depends on compile-time settings for
851
+ how to produce 64bit offset. See DW_DLC_IRIX_OFFSET64.
852
+ Historic versions. One of
853
+ If DW_DLC_POINTER64 is not set DW_DLC_POINTER32 is assumed.
854
+ If DW_DLC_OFFSET64 or DW_DLC_IRIX_OFFSET64 is not
855
+ set 32bit offset DWARF is assumed.
856
+ Non-MIPS Non IA64 should use DW_DLC_SYMBOLIC_RELOCATIONS
857
+ and handle the relocation creation for the target
858
+ itself using the symbolic relocations to do so, those
859
+ use the Dwarf_Rel_Type enum relocation indicators.
860
+
861
+ */
862
+ /* The first three are traditional dwarf producer names.
863
+ These names still work.
864
+ Newer names below.
865
+ */
866
+ #define DW_DLC_SIZE_64 0x40000000 /* 64-bit address-size target */
867
+ #define DW_DLC_SIZE_32 0x20000000 /* 32-bit address-size target */
868
+ #define DW_DLC_OFFSET_SIZE_64 0x10000000 /* 64-bit offset-size DWARF */
869
+
870
+ /* dwarf_producer_init*() access flag modifiers
871
+ Some new April 2014.
872
+ If DW_DLC_STREAM_RELOCATIONS is set the
873
+ DW_DLC_ISA_* flags are ignored. See the Dwarf_Rel_Type enum.
874
+ */
875
+
876
+ /* Old style Elf binary relocation (.rel) records. The default. */
877
+ #define DW_DLC_STREAM_RELOCATIONS 0x02000000
878
+
879
+ #define DW_DLC_OFFSET32 0x00010000 /* use 32-bit sec offsets */
880
+ /* The following 3 are new sensible names. Old names above with same values. */
881
+ #define DW_DLC_OFFSET64 0x10000000 /* use 64-bit sec offsets */
882
+ #define DW_DLC_POINTER32 0x20000000 /* use 4 for address_size */
883
+ #define DW_DLC_POINTER64 0x40000000 /* use 8 for address_size */
884
+ /* Special for IRIX only */
885
+ #define DW_DLC_IRIX_OFFSET64 0x00200000 /* use non-std IRIX 64bitoffset headers */
886
+
887
+ /* Usable with assembly output because it is up to the producer to
888
+ deal with locations in whatever manner the calling producer
889
+ code wishes. For example, when the libdwarf caller wishes
890
+ to produce relocations differently than the binary
891
+ relocation bits that libdwarf Stream Relocations generate.
892
+ */
893
+ #define DW_DLC_SYMBOLIC_RELOCATIONS 0x04000000
894
+
895
+
896
+ #define DW_DLC_TARGET_BIGENDIAN 0x08000000 /* Big endian target */
897
+ #define DW_DLC_TARGET_LITTLEENDIAN 0x00100000 /* Little endian target */
898
+
899
+
900
+ /* dwarf_pcline() slide arguments
901
+ */
902
+ #define DW_DLS_BACKWARD -1 /* slide backward to find line */
903
+ #define DW_DLS_NOSLIDE 0 /* match exactly without sliding */
904
+ #define DW_DLS_FORWARD 1 /* slide forward to find line */
905
+
906
+ /* libdwarf error numbers
907
+ */
908
+ #define DW_DLE_NE 0 /* no error */
909
+ #define DW_DLE_VMM 1 /* dwarf format/library version mismatch */
910
+ #define DW_DLE_MAP 2 /* memory map failure */
911
+ #define DW_DLE_LEE 3 /* libelf error */
912
+ #define DW_DLE_NDS 4 /* no debug section */
913
+ #define DW_DLE_NLS 5 /* no line section */
914
+ #define DW_DLE_ID 6 /* invalid descriptor for query */
915
+ #define DW_DLE_IOF 7 /* I/O failure */
916
+ #define DW_DLE_MAF 8 /* memory allocation failure */
917
+ #define DW_DLE_IA 9 /* invalid argument */
918
+ #define DW_DLE_MDE 10 /* mangled debugging entry */
919
+ #define DW_DLE_MLE 11 /* mangled line number entry */
920
+ #define DW_DLE_FNO 12 /* file not open */
921
+ #define DW_DLE_FNR 13 /* file not a regular file */
922
+ #define DW_DLE_FWA 14 /* file open with wrong access */
923
+ #define DW_DLE_NOB 15 /* not an object file */
924
+ #define DW_DLE_MOF 16 /* mangled object file header */
925
+ #define DW_DLE_EOLL 17 /* end of location list entries */
926
+ #define DW_DLE_NOLL 18 /* no location list section */
927
+ #define DW_DLE_BADOFF 19 /* Invalid offset */
928
+ #define DW_DLE_EOS 20 /* end of section */
929
+ #define DW_DLE_ATRUNC 21 /* abbreviations section appears truncated*/
930
+ #define DW_DLE_BADBITC 22 /* Address size passed to dwarf bad*/
931
+ /* It is not an allowed size (64 or 32) */
932
+ /* Error codes defined by the current Libdwarf Implementation. */
933
+ #define DW_DLE_DBG_ALLOC 23
934
+ #define DW_DLE_FSTAT_ERROR 24
935
+ #define DW_DLE_FSTAT_MODE_ERROR 25
936
+ #define DW_DLE_INIT_ACCESS_WRONG 26
937
+ #define DW_DLE_ELF_BEGIN_ERROR 27
938
+ #define DW_DLE_ELF_GETEHDR_ERROR 28
939
+ #define DW_DLE_ELF_GETSHDR_ERROR 29
940
+ #define DW_DLE_ELF_STRPTR_ERROR 30
941
+ #define DW_DLE_DEBUG_INFO_DUPLICATE 31
942
+ #define DW_DLE_DEBUG_INFO_NULL 32
943
+ #define DW_DLE_DEBUG_ABBREV_DUPLICATE 33
944
+ #define DW_DLE_DEBUG_ABBREV_NULL 34
945
+ #define DW_DLE_DEBUG_ARANGES_DUPLICATE 35
946
+ #define DW_DLE_DEBUG_ARANGES_NULL 36
947
+ #define DW_DLE_DEBUG_LINE_DUPLICATE 37
948
+ #define DW_DLE_DEBUG_LINE_NULL 38
949
+ #define DW_DLE_DEBUG_LOC_DUPLICATE 39
950
+ #define DW_DLE_DEBUG_LOC_NULL 40
951
+ #define DW_DLE_DEBUG_MACINFO_DUPLICATE 41
952
+ #define DW_DLE_DEBUG_MACINFO_NULL 42
953
+ #define DW_DLE_DEBUG_PUBNAMES_DUPLICATE 43
954
+ #define DW_DLE_DEBUG_PUBNAMES_NULL 44
955
+ #define DW_DLE_DEBUG_STR_DUPLICATE 45
956
+ #define DW_DLE_DEBUG_STR_NULL 46
957
+ #define DW_DLE_CU_LENGTH_ERROR 47
958
+ #define DW_DLE_VERSION_STAMP_ERROR 48
959
+ #define DW_DLE_ABBREV_OFFSET_ERROR 49
960
+ #define DW_DLE_ADDRESS_SIZE_ERROR 50
961
+ #define DW_DLE_DEBUG_INFO_PTR_NULL 51
962
+ #define DW_DLE_DIE_NULL 52
963
+ #define DW_DLE_STRING_OFFSET_BAD 53
964
+ #define DW_DLE_DEBUG_LINE_LENGTH_BAD 54
965
+ #define DW_DLE_LINE_PROLOG_LENGTH_BAD 55
966
+ #define DW_DLE_LINE_NUM_OPERANDS_BAD 56
967
+ #define DW_DLE_LINE_SET_ADDR_ERROR 57 /* No longer used. */
968
+ #define DW_DLE_LINE_EXT_OPCODE_BAD 58
969
+ #define DW_DLE_DWARF_LINE_NULL 59
970
+ #define DW_DLE_INCL_DIR_NUM_BAD 60
971
+ #define DW_DLE_LINE_FILE_NUM_BAD 61
972
+ #define DW_DLE_ALLOC_FAIL 62
973
+ #define DW_DLE_NO_CALLBACK_FUNC 63
974
+ #define DW_DLE_SECT_ALLOC 64
975
+ #define DW_DLE_FILE_ENTRY_ALLOC 65
976
+ #define DW_DLE_LINE_ALLOC 66
977
+ #define DW_DLE_FPGM_ALLOC 67
978
+ #define DW_DLE_INCDIR_ALLOC 68
979
+ #define DW_DLE_STRING_ALLOC 69
980
+ #define DW_DLE_CHUNK_ALLOC 70
981
+ #define DW_DLE_BYTEOFF_ERR 71
982
+ #define DW_DLE_CIE_ALLOC 72
983
+ #define DW_DLE_FDE_ALLOC 73
984
+ #define DW_DLE_REGNO_OVFL 74
985
+ #define DW_DLE_CIE_OFFS_ALLOC 75
986
+ #define DW_DLE_WRONG_ADDRESS 76
987
+ #define DW_DLE_EXTRA_NEIGHBORS 77
988
+ #define DW_DLE_WRONG_TAG 78
989
+ #define DW_DLE_DIE_ALLOC 79
990
+ #define DW_DLE_PARENT_EXISTS 80
991
+ #define DW_DLE_DBG_NULL 81
992
+ #define DW_DLE_DEBUGLINE_ERROR 82
993
+ #define DW_DLE_DEBUGFRAME_ERROR 83
994
+ #define DW_DLE_DEBUGINFO_ERROR 84
995
+ #define DW_DLE_ATTR_ALLOC 85
996
+ #define DW_DLE_ABBREV_ALLOC 86
997
+ #define DW_DLE_OFFSET_UFLW 87
998
+ #define DW_DLE_ELF_SECT_ERR 88
999
+ #define DW_DLE_DEBUG_FRAME_LENGTH_BAD 89
1000
+ #define DW_DLE_FRAME_VERSION_BAD 90
1001
+ #define DW_DLE_CIE_RET_ADDR_REG_ERROR 91
1002
+ #define DW_DLE_FDE_NULL 92
1003
+ #define DW_DLE_FDE_DBG_NULL 93
1004
+ #define DW_DLE_CIE_NULL 94
1005
+ #define DW_DLE_CIE_DBG_NULL 95
1006
+ #define DW_DLE_FRAME_TABLE_COL_BAD 96
1007
+ #define DW_DLE_PC_NOT_IN_FDE_RANGE 97
1008
+ #define DW_DLE_CIE_INSTR_EXEC_ERROR 98
1009
+ #define DW_DLE_FRAME_INSTR_EXEC_ERROR 99
1010
+ #define DW_DLE_FDE_PTR_NULL 100
1011
+ #define DW_DLE_RET_OP_LIST_NULL 101
1012
+ #define DW_DLE_LINE_CONTEXT_NULL 102
1013
+ #define DW_DLE_DBG_NO_CU_CONTEXT 103
1014
+ #define DW_DLE_DIE_NO_CU_CONTEXT 104
1015
+ #define DW_DLE_FIRST_DIE_NOT_CU 105
1016
+ #define DW_DLE_NEXT_DIE_PTR_NULL 106
1017
+ #define DW_DLE_DEBUG_FRAME_DUPLICATE 107
1018
+ #define DW_DLE_DEBUG_FRAME_NULL 108
1019
+ #define DW_DLE_ABBREV_DECODE_ERROR 109
1020
+ #define DW_DLE_DWARF_ABBREV_NULL 110
1021
+ #define DW_DLE_ATTR_NULL 111
1022
+ #define DW_DLE_DIE_BAD 112
1023
+ #define DW_DLE_DIE_ABBREV_BAD 113
1024
+ #define DW_DLE_ATTR_FORM_BAD 114
1025
+ #define DW_DLE_ATTR_NO_CU_CONTEXT 115
1026
+ #define DW_DLE_ATTR_FORM_SIZE_BAD 116
1027
+ #define DW_DLE_ATTR_DBG_NULL 117
1028
+ #define DW_DLE_BAD_REF_FORM 118
1029
+ #define DW_DLE_ATTR_FORM_OFFSET_BAD 119
1030
+ #define DW_DLE_LINE_OFFSET_BAD 120
1031
+ #define DW_DLE_DEBUG_STR_OFFSET_BAD 121
1032
+ #define DW_DLE_STRING_PTR_NULL 122
1033
+ #define DW_DLE_PUBNAMES_VERSION_ERROR 123
1034
+ #define DW_DLE_PUBNAMES_LENGTH_BAD 124
1035
+ #define DW_DLE_GLOBAL_NULL 125
1036
+ #define DW_DLE_GLOBAL_CONTEXT_NULL 126
1037
+ #define DW_DLE_DIR_INDEX_BAD 127
1038
+ #define DW_DLE_LOC_EXPR_BAD 128
1039
+ #define DW_DLE_DIE_LOC_EXPR_BAD 129
1040
+ #define DW_DLE_ADDR_ALLOC 130
1041
+ #define DW_DLE_OFFSET_BAD 131
1042
+ #define DW_DLE_MAKE_CU_CONTEXT_FAIL 132
1043
+ #define DW_DLE_REL_ALLOC 133
1044
+ #define DW_DLE_ARANGE_OFFSET_BAD 134
1045
+ #define DW_DLE_SEGMENT_SIZE_BAD 135
1046
+ #define DW_DLE_ARANGE_LENGTH_BAD 136
1047
+ #define DW_DLE_ARANGE_DECODE_ERROR 137
1048
+ #define DW_DLE_ARANGES_NULL 138
1049
+ #define DW_DLE_ARANGE_NULL 139
1050
+ #define DW_DLE_NO_FILE_NAME 140
1051
+ #define DW_DLE_NO_COMP_DIR 141
1052
+ #define DW_DLE_CU_ADDRESS_SIZE_BAD 142
1053
+ #define DW_DLE_INPUT_ATTR_BAD 143
1054
+ #define DW_DLE_EXPR_NULL 144
1055
+ #define DW_DLE_BAD_EXPR_OPCODE 145
1056
+ #define DW_DLE_EXPR_LENGTH_BAD 146
1057
+ #define DW_DLE_MULTIPLE_RELOC_IN_EXPR 147
1058
+ #define DW_DLE_ELF_GETIDENT_ERROR 148
1059
+ #define DW_DLE_NO_AT_MIPS_FDE 149
1060
+ #define DW_DLE_NO_CIE_FOR_FDE 150
1061
+ #define DW_DLE_DIE_ABBREV_LIST_NULL 151
1062
+ #define DW_DLE_DEBUG_FUNCNAMES_DUPLICATE 152
1063
+ #define DW_DLE_DEBUG_FUNCNAMES_NULL 153
1064
+ #define DW_DLE_DEBUG_FUNCNAMES_VERSION_ERROR 154
1065
+ #define DW_DLE_DEBUG_FUNCNAMES_LENGTH_BAD 155
1066
+ #define DW_DLE_FUNC_NULL 156
1067
+ #define DW_DLE_FUNC_CONTEXT_NULL 157
1068
+ #define DW_DLE_DEBUG_TYPENAMES_DUPLICATE 158
1069
+ #define DW_DLE_DEBUG_TYPENAMES_NULL 159
1070
+ #define DW_DLE_DEBUG_TYPENAMES_VERSION_ERROR 160
1071
+ #define DW_DLE_DEBUG_TYPENAMES_LENGTH_BAD 161
1072
+ #define DW_DLE_TYPE_NULL 162
1073
+ #define DW_DLE_TYPE_CONTEXT_NULL 163
1074
+ #define DW_DLE_DEBUG_VARNAMES_DUPLICATE 164
1075
+ #define DW_DLE_DEBUG_VARNAMES_NULL 165
1076
+ #define DW_DLE_DEBUG_VARNAMES_VERSION_ERROR 166
1077
+ #define DW_DLE_DEBUG_VARNAMES_LENGTH_BAD 167
1078
+ #define DW_DLE_VAR_NULL 168
1079
+ #define DW_DLE_VAR_CONTEXT_NULL 169
1080
+ #define DW_DLE_DEBUG_WEAKNAMES_DUPLICATE 170
1081
+ #define DW_DLE_DEBUG_WEAKNAMES_NULL 171
1082
+ #define DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR 172
1083
+ #define DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD 173
1084
+ #define DW_DLE_WEAK_NULL 174
1085
+ #define DW_DLE_WEAK_CONTEXT_NULL 175
1086
+ #define DW_DLE_LOCDESC_COUNT_WRONG 176
1087
+ #define DW_DLE_MACINFO_STRING_NULL 177
1088
+ #define DW_DLE_MACINFO_STRING_EMPTY 178
1089
+ #define DW_DLE_MACINFO_INTERNAL_ERROR_SPACE 179
1090
+ #define DW_DLE_MACINFO_MALLOC_FAIL 180
1091
+ #define DW_DLE_DEBUGMACINFO_ERROR 181
1092
+ #define DW_DLE_DEBUG_MACRO_LENGTH_BAD 182
1093
+ #define DW_DLE_DEBUG_MACRO_MAX_BAD 183
1094
+ #define DW_DLE_DEBUG_MACRO_INTERNAL_ERR 184
1095
+ #define DW_DLE_DEBUG_MACRO_MALLOC_SPACE 185
1096
+ #define DW_DLE_DEBUG_MACRO_INCONSISTENT 186
1097
+ #define DW_DLE_DF_NO_CIE_AUGMENTATION 187
1098
+ #define DW_DLE_DF_REG_NUM_TOO_HIGH 188
1099
+ #define DW_DLE_DF_MAKE_INSTR_NO_INIT 189
1100
+ #define DW_DLE_DF_NEW_LOC_LESS_OLD_LOC 190
1101
+ #define DW_DLE_DF_POP_EMPTY_STACK 191
1102
+ #define DW_DLE_DF_ALLOC_FAIL 192
1103
+ #define DW_DLE_DF_FRAME_DECODING_ERROR 193
1104
+ #define DW_DLE_DEBUG_LOC_SECTION_SHORT 194
1105
+ #define DW_DLE_FRAME_AUGMENTATION_UNKNOWN 195
1106
+ #define DW_DLE_PUBTYPE_CONTEXT 196 /* Unused. */
1107
+ #define DW_DLE_DEBUG_PUBTYPES_LENGTH_BAD 197
1108
+ #define DW_DLE_DEBUG_PUBTYPES_VERSION_ERROR 198
1109
+ #define DW_DLE_DEBUG_PUBTYPES_DUPLICATE 199
1110
+ #define DW_DLE_FRAME_CIE_DECODE_ERROR 200
1111
+ #define DW_DLE_FRAME_REGISTER_UNREPRESENTABLE 201
1112
+ #define DW_DLE_FRAME_REGISTER_COUNT_MISMATCH 202
1113
+ #define DW_DLE_LINK_LOOP 203
1114
+ #define DW_DLE_STRP_OFFSET_BAD 204
1115
+ #define DW_DLE_DEBUG_RANGES_DUPLICATE 205
1116
+ #define DW_DLE_DEBUG_RANGES_OFFSET_BAD 206
1117
+ #define DW_DLE_DEBUG_RANGES_MISSING_END 207
1118
+ #define DW_DLE_DEBUG_RANGES_OUT_OF_MEM 208
1119
+ #define DW_DLE_DEBUG_SYMTAB_ERR 209
1120
+ #define DW_DLE_DEBUG_STRTAB_ERR 210
1121
+ #define DW_DLE_RELOC_MISMATCH_INDEX 211
1122
+ #define DW_DLE_RELOC_MISMATCH_RELOC_INDEX 212
1123
+ #define DW_DLE_RELOC_MISMATCH_STRTAB_INDEX 213
1124
+ #define DW_DLE_RELOC_SECTION_MISMATCH 214
1125
+ #define DW_DLE_RELOC_SECTION_MISSING_INDEX 215
1126
+ #define DW_DLE_RELOC_SECTION_LENGTH_ODD 216
1127
+ #define DW_DLE_RELOC_SECTION_PTR_NULL 217
1128
+ #define DW_DLE_RELOC_SECTION_MALLOC_FAIL 218
1129
+ #define DW_DLE_NO_ELF64_SUPPORT 219
1130
+ #define DW_DLE_MISSING_ELF64_SUPPORT 220
1131
+ #define DW_DLE_ORPHAN_FDE 221
1132
+ #define DW_DLE_DUPLICATE_INST_BLOCK 222
1133
+ #define DW_DLE_BAD_REF_SIG8_FORM 223
1134
+ #define DW_DLE_ATTR_EXPRLOC_FORM_BAD 224
1135
+ #define DW_DLE_FORM_SEC_OFFSET_LENGTH_BAD 225
1136
+ #define DW_DLE_NOT_REF_FORM 226
1137
+ #define DW_DLE_DEBUG_FRAME_LENGTH_NOT_MULTIPLE 227
1138
+ #define DW_DLE_REF_SIG8_NOT_HANDLED 228
1139
+ #define DW_DLE_DEBUG_FRAME_POSSIBLE_ADDRESS_BOTCH 229
1140
+ #define DW_DLE_LOC_BAD_TERMINATION 230
1141
+ #define DW_DLE_SYMTAB_SECTION_LENGTH_ODD 231
1142
+ #define DW_DLE_RELOC_SECTION_SYMBOL_INDEX_BAD 232
1143
+ #define DW_DLE_RELOC_SECTION_RELOC_TARGET_SIZE_UNKNOWN 233
1144
+ #define DW_DLE_SYMTAB_SECTION_ENTRYSIZE_ZERO 234
1145
+ #define DW_DLE_LINE_NUMBER_HEADER_ERROR 235
1146
+ #define DW_DLE_DEBUG_TYPES_NULL 236
1147
+ #define DW_DLE_DEBUG_TYPES_DUPLICATE 237
1148
+ #define DW_DLE_DEBUG_TYPES_ONLY_DWARF4 238
1149
+ #define DW_DLE_DEBUG_TYPEOFFSET_BAD 239
1150
+ #define DW_DLE_GNU_OPCODE_ERROR 240
1151
+ #define DW_DLE_DEBUGPUBTYPES_ERROR 241
1152
+ #define DW_DLE_AT_FIXUP_NULL 242
1153
+ #define DW_DLE_AT_FIXUP_DUP 243
1154
+ #define DW_DLE_BAD_ABINAME 244
1155
+ #define DW_DLE_TOO_MANY_DEBUG 245
1156
+ #define DW_DLE_DEBUG_STR_OFFSETS_DUPLICATE 246
1157
+ #define DW_DLE_SECTION_DUPLICATION 247
1158
+ #define DW_DLE_SECTION_ERROR 248
1159
+ #define DW_DLE_DEBUG_ADDR_DUPLICATE 249
1160
+ #define DW_DLE_DEBUG_CU_UNAVAILABLE_FOR_FORM 250
1161
+ #define DW_DLE_DEBUG_FORM_HANDLING_INCOMPLETE 251
1162
+ #define DW_DLE_NEXT_DIE_PAST_END 252
1163
+ #define DW_DLE_NEXT_DIE_WRONG_FORM 253
1164
+ #define DW_DLE_NEXT_DIE_NO_ABBREV_LIST 254
1165
+ #define DW_DLE_NESTED_FORM_INDIRECT_ERROR 255
1166
+ #define DW_DLE_CU_DIE_NO_ABBREV_LIST 256
1167
+ #define DW_DLE_MISSING_NEEDED_DEBUG_ADDR_SECTION 257
1168
+ #define DW_DLE_ATTR_FORM_NOT_ADDR_INDEX 258
1169
+ #define DW_DLE_ATTR_FORM_NOT_STR_INDEX 259
1170
+ #define DW_DLE_DUPLICATE_GDB_INDEX 260
1171
+ #define DW_DLE_ERRONEOUS_GDB_INDEX_SECTION 261
1172
+ #define DW_DLE_GDB_INDEX_COUNT_ERROR 262
1173
+ #define DW_DLE_GDB_INDEX_COUNT_ADDR_ERROR 263
1174
+ #define DW_DLE_GDB_INDEX_INDEX_ERROR 264
1175
+ #define DW_DLE_GDB_INDEX_CUVEC_ERROR 265
1176
+ #define DW_DLE_DUPLICATE_CU_INDEX 266
1177
+ #define DW_DLE_DUPLICATE_TU_INDEX 267
1178
+ #define DW_DLE_XU_TYPE_ARG_ERROR 268
1179
+ #define DW_DLE_XU_IMPOSSIBLE_ERROR 269
1180
+ #define DW_DLE_XU_NAME_COL_ERROR 270
1181
+ #define DW_DLE_XU_HASH_ROW_ERROR 271
1182
+ #define DW_DLE_XU_HASH_INDEX_ERROR 272
1183
+
1184
+ /* DW_DLE_FAILSAFE_ERRVAL is an aid when out of memory. */
1185
+ #define DW_DLE_FAILSAFE_ERRVAL 273
1186
+ #define DW_DLE_ARANGE_ERROR 274
1187
+ #define DW_DLE_PUBNAMES_ERROR 275
1188
+ #define DW_DLE_FUNCNAMES_ERROR 276
1189
+ #define DW_DLE_TYPENAMES_ERROR 277
1190
+ #define DW_DLE_VARNAMES_ERROR 278
1191
+ #define DW_DLE_WEAKNAMES_ERROR 279
1192
+ #define DW_DLE_RELOCS_ERROR 280
1193
+ #define DW_DLE_ATTR_OUTSIDE_SECTION 281
1194
+ #define DW_DLE_FISSION_INDEX_WRONG 282
1195
+ #define DW_DLE_FISSION_VERSION_ERROR 283
1196
+ #define DW_DLE_NEXT_DIE_LOW_ERROR 284
1197
+ #define DW_DLE_CU_UT_TYPE_ERROR 285
1198
+ #define DW_DLE_NO_SUCH_SIGNATURE_FOUND 286
1199
+ #define DW_DLE_SIGNATURE_SECTION_NUMBER_WRONG 287
1200
+ #define DW_DLE_ATTR_FORM_NOT_DATA8 288
1201
+ #define DW_DLE_SIG_TYPE_WRONG_STRING 289
1202
+ #define DW_DLE_MISSING_REQUIRED_TU_OFFSET_HASH 290
1203
+ #define DW_DLE_MISSING_REQUIRED_CU_OFFSET_HASH 291
1204
+ #define DW_DLE_DWP_MISSING_DWO_ID 292
1205
+ #define DW_DLE_DWP_SIBLING_ERROR 293
1206
+ #define DW_DLE_DEBUG_FISSION_INCOMPLETE 294
1207
+ #define DW_DLE_FISSION_SECNUM_ERR 295
1208
+ #define DW_DLE_DEBUG_MACRO_DUPLICATE 296
1209
+ #define DW_DLE_DEBUG_NAMES_DUPLICATE 297
1210
+ #define DW_DLE_DEBUG_LINE_STR_DUPLICATE 298
1211
+ #define DW_DLE_DEBUG_SUP_DUPLICATE 299
1212
+ #define DW_DLE_NO_SIGNATURE_TO_LOOKUP 300
1213
+ #define DW_DLE_NO_TIED_ADDR_AVAILABLE 301
1214
+ #define DW_DLE_NO_TIED_SIG_AVAILABLE 302
1215
+ #define DW_DLE_STRING_NOT_TERMINATED 303
1216
+ #define DW_DLE_BAD_LINE_TABLE_OPERATION 304
1217
+ #define DW_DLE_LINE_CONTEXT_BOTCH 305
1218
+ #define DW_DLE_LINE_CONTEXT_INDEX_WRONG 306
1219
+ #define DW_DLE_NO_TIED_STRING_AVAILABLE 307
1220
+ #define DW_DLE_NO_TIED_FILE_AVAILABLE 308
1221
+ #define DW_DLE_CU_TYPE_MISSING 309
1222
+ #define DW_DLE_LLE_CODE_UNKNOWN 310
1223
+ #define DW_DLE_LOCLIST_INTERFACE_ERROR 311
1224
+ #define DW_DLE_LOCLIST_INDEX_ERROR 312
1225
+ #define DW_DLE_INTERFACE_NOT_SUPPORTED 313
1226
+
1227
+ /* DW_DLE_LAST MUST EQUAL LAST ERROR NUMBER */
1228
+ #define DW_DLE_LAST 313
1229
+ #define DW_DLE_LO_USER 0x10000
1230
+
1231
+ /* Taken as meaning 'undefined value', this is not
1232
+ a column or register number.
1233
+ Only present at libdwarf runtime. Never on disk.
1234
+ DW_FRAME_* Values present on disk are in dwarf.h
1235
+ */
1236
+ #define DW_FRAME_UNDEFINED_VAL 1034
1237
+
1238
+ /* Taken as meaning 'same value' as caller had, not a column
1239
+ or register number
1240
+ Only present at libdwarf runtime. Never on disk.
1241
+ DW_FRAME_* Values present on disk are in dwarf.h
1242
+ */
1243
+ #define DW_FRAME_SAME_VAL 1035
1244
+
1245
+
1246
+
1247
+ /* error return values
1248
+ */
1249
+ #define DW_DLV_BADADDR (~(Dwarf_Addr)0)
1250
+ /* for functions returning target address */
1251
+
1252
+ #define DW_DLV_NOCOUNT ((Dwarf_Signed)-1)
1253
+ /* for functions returning count */
1254
+
1255
+ #define DW_DLV_BADOFFSET (~(Dwarf_Off)0)
1256
+ /* for functions returning offset */
1257
+
1258
+ /* standard return values for functions */
1259
+ #define DW_DLV_NO_ENTRY -1
1260
+ #define DW_DLV_OK 0
1261
+ #define DW_DLV_ERROR 1
1262
+
1263
+ /* Special values for offset_into_exception_table field of dwarf fde's. */
1264
+ /* The following value indicates that there is no Exception table offset
1265
+ associated with a dwarf frame. */
1266
+ #define DW_DLX_NO_EH_OFFSET (-1LL)
1267
+ /* The following value indicates that the producer was unable to analyse the
1268
+ source file to generate Exception tables for this function. */
1269
+ #define DW_DLX_EH_OFFSET_UNAVAILABLE (-2LL)
1270
+
1271
+ /* The dwarf specification separates FORMs into
1272
+ different classes. To do the seperation properly
1273
+ requires 4 pieces of data as of DWARF4 (thus the
1274
+ function arguments listed here).
1275
+ The DWARF4 specification class definition suffices to
1276
+ describe all DWARF versions.
1277
+ See section 7.5.4, Attribute Encodings.
1278
+ A return of DW_FORM_CLASS_UNKNOWN means we could not properly figure
1279
+ out what form-class it is.
1280
+
1281
+ DW_FORM_CLASS_FRAMEPTR is MIPS/IRIX only, and refers
1282
+ to the DW_AT_MIPS_fde attribute (a reference to the
1283
+ .debug_frame section).
1284
+ */
1285
+ enum Dwarf_Form_Class {
1286
+ DW_FORM_CLASS_UNKNOWN, DW_FORM_CLASS_ADDRESS,
1287
+ DW_FORM_CLASS_BLOCK, DW_FORM_CLASS_CONSTANT,
1288
+ DW_FORM_CLASS_EXPRLOC, DW_FORM_CLASS_FLAG,
1289
+ DW_FORM_CLASS_LINEPTR, DW_FORM_CLASS_LOCLISTPTR,
1290
+ DW_FORM_CLASS_MACPTR, DW_FORM_CLASS_RANGELISTPTR,
1291
+ DW_FORM_CLASS_REFERENCE, DW_FORM_CLASS_STRING,
1292
+ DW_FORM_CLASS_FRAMEPTR
1293
+ };
1294
+
1295
+
1296
+ /*===========================================================================*/
1297
+ /* Dwarf consumer interface initialization and termination operations */
1298
+
1299
+ /* Initialization based on Unix open fd (using libelf internally). */
1300
+ int dwarf_init(int /*fd*/,
1301
+ Dwarf_Unsigned /*access*/,
1302
+ Dwarf_Handler /*errhand*/,
1303
+ Dwarf_Ptr /*errarg*/,
1304
+ Dwarf_Debug* /*dbg*/,
1305
+ Dwarf_Error* /*error*/);
1306
+
1307
+ /* Initialization based on libelf/sgi-fastlibelf open pointer. */
1308
+ int dwarf_elf_init(dwarf_elf_handle /*elf*/,
1309
+ Dwarf_Unsigned /*access*/,
1310
+ Dwarf_Handler /*errhand*/,
1311
+ Dwarf_Ptr /*errarg*/,
1312
+ Dwarf_Debug* /*dbg*/,
1313
+ Dwarf_Error* /*error*/);
1314
+
1315
+ /* Undocumented function for memory allocator. */
1316
+ void dwarf_print_memory_stats(Dwarf_Debug /*dbg*/);
1317
+
1318
+ int dwarf_get_elf(Dwarf_Debug /*dbg*/,
1319
+ dwarf_elf_handle* /*return_elfptr*/,
1320
+ Dwarf_Error* /*error*/);
1321
+
1322
+ int dwarf_finish(Dwarf_Debug /*dbg*/, Dwarf_Error* /*error*/);
1323
+
1324
+
1325
+ int dwarf_object_init(Dwarf_Obj_Access_Interface* /* obj */,
1326
+ Dwarf_Handler /* errhand */,
1327
+ Dwarf_Ptr /* errarg */,
1328
+ Dwarf_Debug* /* dbg */,
1329
+ Dwarf_Error* /* error */);
1330
+
1331
+ int dwarf_set_tied_dbg(Dwarf_Debug /*basedbg*/,
1332
+ Dwarf_Debug /*tied_dbg*/,
1333
+ Dwarf_Error* /* error */);
1334
+
1335
+ int dwarf_object_finish(Dwarf_Debug /* dbg */,
1336
+ Dwarf_Error* /* error */);
1337
+
1338
+ /* Section name access. Because sections might
1339
+ now end with .dwo or might not (as of DWARF5) */
1340
+ int
1341
+ dwarf_get_die_section_name(Dwarf_Debug /*dbg*/,
1342
+ Dwarf_Bool /*is_info*/,
1343
+ const char ** /*sec_name*/,
1344
+ Dwarf_Error * /*error*/);
1345
+
1346
+
1347
+ /* dwarf_next_cu_header_d() traverses debug_types CU headers.
1348
+ New in May, 2015.
1349
+ */
1350
+ int dwarf_next_cu_header_d(Dwarf_Debug /*dbg*/,
1351
+ Dwarf_Bool /*is_info*/,
1352
+ Dwarf_Unsigned* /*cu_header_length*/,
1353
+ Dwarf_Half* /*version_stamp*/,
1354
+ Dwarf_Off* /*abbrev_offset*/,
1355
+ Dwarf_Half* /*address_size*/,
1356
+ Dwarf_Half* /*length_size*/,
1357
+ Dwarf_Half* /*extension_size*/,
1358
+ Dwarf_Sig8* /*type signature*/,
1359
+ Dwarf_Unsigned* /*typeoffset*/,
1360
+ Dwarf_Unsigned* /*next_cu_header_offset*/,
1361
+ Dwarf_Half * /*header_cu_type*/,
1362
+ Dwarf_Error* /*error*/);
1363
+
1364
+ /* Die traversal operations.
1365
+ dwarf_next_cu_header_b() traverses debug_info CU headers.
1366
+ Obsolete but supported.
1367
+ */
1368
+ int dwarf_next_cu_header_b(Dwarf_Debug /*dbg*/,
1369
+ Dwarf_Unsigned* /*cu_header_length*/,
1370
+ Dwarf_Half* /*version_stamp*/,
1371
+ Dwarf_Off* /*abbrev_offset*/,
1372
+ Dwarf_Half* /*address_size*/,
1373
+ Dwarf_Half* /*length_size*/,
1374
+ Dwarf_Half* /*extension_size*/,
1375
+ Dwarf_Unsigned* /*next_cu_header_offset*/,
1376
+ Dwarf_Error* /*error*/);
1377
+
1378
+ /* dwarf_next_cu_header_types() traverses debug_types CU headers.
1379
+ New in October, 2011. Obsolete but supported May 2015.
1380
+ */
1381
+ int dwarf_next_cu_header_c(Dwarf_Debug /*dbg*/,
1382
+ Dwarf_Bool /*is_info*/,
1383
+ Dwarf_Unsigned* /*cu_header_length*/,
1384
+ Dwarf_Half* /*version_stamp*/,
1385
+ Dwarf_Off* /*abbrev_offset*/,
1386
+ Dwarf_Half* /*address_size*/,
1387
+ Dwarf_Half* /*length_size*/,
1388
+ Dwarf_Half* /*extension_size*/,
1389
+ Dwarf_Sig8* /*type signature*/,
1390
+ Dwarf_Unsigned* /*typeoffset*/,
1391
+ Dwarf_Unsigned* /*next_cu_header_offset*/,
1392
+ Dwarf_Error* /*error*/);
1393
+ /* The following is obsolete, though supported. November 2009. */
1394
+ int dwarf_next_cu_header(Dwarf_Debug /*dbg*/,
1395
+ Dwarf_Unsigned* /*cu_header_length*/,
1396
+ Dwarf_Half* /*version_stamp*/,
1397
+ Dwarf_Off* /*abbrev_offset*/,
1398
+ Dwarf_Half* /*address_size*/,
1399
+ Dwarf_Unsigned* /*next_cu_header_offset*/,
1400
+ Dwarf_Error* /*error*/);
1401
+
1402
+ int dwarf_siblingof(Dwarf_Debug /*dbg*/,
1403
+ Dwarf_Die /*die*/,
1404
+ Dwarf_Die* /*return_siblingdie*/,
1405
+ Dwarf_Error* /*error*/);
1406
+ /* dwarf_siblingof_b new October 2011. */
1407
+ int dwarf_siblingof_b(Dwarf_Debug /*dbg*/,
1408
+ Dwarf_Die /*die*/,
1409
+ Dwarf_Bool /*is_info*/,
1410
+ Dwarf_Die* /*return_siblingdie*/,
1411
+ Dwarf_Error* /*error*/);
1412
+
1413
+ /* New 27 April 2015. */
1414
+ int dwarf_die_from_hash_signature(Dwarf_Debug dbg,
1415
+ Dwarf_Sig8 * /*hash_sig*/,
1416
+ const char * /*sig_type: "tu" or "cu"*/,
1417
+ Dwarf_Die* /*returned_CU_die */,
1418
+ Dwarf_Error* /*error*/);
1419
+
1420
+ int dwarf_child(Dwarf_Die /*die*/,
1421
+ Dwarf_Die* /*return_childdie*/,
1422
+ Dwarf_Error* /*error*/);
1423
+
1424
+ /* Finding die given global (not CU-relative) offset.
1425
+ Applies only to debug_info. */
1426
+ int dwarf_offdie(Dwarf_Debug /*dbg*/,
1427
+ Dwarf_Off /*offset*/,
1428
+ Dwarf_Die* /*return_die*/,
1429
+ Dwarf_Error* /*error*/);
1430
+
1431
+ /* dwarf_offdie_b() new October 2011 */
1432
+ /* Finding die given global (not CU-relative) offset.
1433
+ Applies to debug_info (is_info true) or debug_types (is_info false). */
1434
+ int dwarf_offdie_b(Dwarf_Debug /*dbg*/,
1435
+ Dwarf_Off /*offset*/,
1436
+ Dwarf_Bool /*is_info*/,
1437
+ Dwarf_Die* /*return_die*/,
1438
+ Dwarf_Error* /*error*/);
1439
+
1440
+ /* Returns the is_info flag through the pointer if the function returns
1441
+ DW_DLV_OK. Needed so client software knows if a DIE is in debug_info
1442
+ or debug_types.
1443
+ New October 2011. */
1444
+ Dwarf_Bool dwarf_get_die_infotypes_flag(Dwarf_Die /*die*/);
1445
+
1446
+
1447
+ /* operations on DIEs */
1448
+ int dwarf_tag(Dwarf_Die /*die*/,
1449
+ Dwarf_Half* /*return_tag*/,
1450
+ Dwarf_Error* /*error*/);
1451
+
1452
+ /* dwarf_dieoffset returns the global debug_info
1453
+ section offset, not the CU relative offset. */
1454
+ int dwarf_dieoffset(Dwarf_Die /*die*/,
1455
+ Dwarf_Off* /*return_offset*/,
1456
+ Dwarf_Error* /*error*/);
1457
+
1458
+ /* NEW October 2015. DWARF5.
1459
+ The DIE here can be any DIE in the relevant CU.
1460
+ index is an index into .debug_addr.
1461
+ This will look first for .debug_addr
1462
+ in the dbg object DIE
1463
+ and if not there (because the dbg object is
1464
+ a dwo or dwp split dwarf object)
1465
+ will look in the tied object if tied is available. */
1466
+ int
1467
+ dwarf_debug_addr_index_to_addr(Dwarf_Die /*die*/,
1468
+ Dwarf_Unsigned /*index*/,
1469
+ Dwarf_Addr * /*return_addr*/,
1470
+ Dwarf_Error * /*error*/);
1471
+
1472
+
1473
+ /* dwarf_CU_dieoffset_given_die returns
1474
+ the global debug_info section offset of the CU die
1475
+ that is the CU containing the given_die
1476
+ (the passed in DIE can be any DIE).
1477
+ This information makes it possible for a consumer to
1478
+ find and print CU context information for any die.
1479
+ See also dwarf_get_cu_die_offset_given_cu_header_offset(). */
1480
+ int dwarf_CU_dieoffset_given_die(Dwarf_Die /*given_die*/,
1481
+ Dwarf_Off* /*return_offset*/,
1482
+ Dwarf_Error* /*error*/);
1483
+
1484
+ /* dwarf_die_CU_offset returns the CU relative offset
1485
+ not the global debug_info section offset, given
1486
+ any DIE in the CU. See also dwarf_CU_dieoffset_given_die().
1487
+ */
1488
+ int dwarf_die_CU_offset(Dwarf_Die /*die*/,
1489
+ Dwarf_Off* /*return_offset*/,
1490
+ Dwarf_Error* /*error*/);
1491
+
1492
+ int dwarf_die_CU_offset_range(Dwarf_Die /*die*/,
1493
+ Dwarf_Off* /*return_CU_header_offset*/,
1494
+ Dwarf_Off* /*return_CU_length_bytes*/,
1495
+ Dwarf_Error* /*error*/);
1496
+
1497
+ int dwarf_attr (Dwarf_Die /*die*/,
1498
+ Dwarf_Half /*attr*/,
1499
+ Dwarf_Attribute * /*returned_attr*/,
1500
+ Dwarf_Error* /*error*/);
1501
+
1502
+ int dwarf_diename(Dwarf_Die /*die*/,
1503
+ char ** /*diename*/,
1504
+ Dwarf_Error* /*error*/);
1505
+
1506
+ /* Returns the abbrev code of the die. Cannot fail. */
1507
+ int dwarf_die_abbrev_code(Dwarf_Die /*die */);
1508
+
1509
+ /* Returns a flag through ab_has_child. Non-zero if
1510
+ the DIE has children, zero if it does not. */
1511
+ int dwarf_die_abbrev_children_flag(Dwarf_Die /*die*/,
1512
+ Dwarf_Half * /*ab_has_child*/);
1513
+
1514
+ /* Validate the sibling DIE. This only makes sense to call
1515
+ if the sibling's DIEs have been travsersed and
1516
+ dwarf_child() called on each,
1517
+ so that the last DIE dwarf_child saw was the last.
1518
+ Essentially ensuring that (after such traversal) that we
1519
+ are in the same place a sibling attribute would identify.
1520
+ In case we return DW_DLV_ERROR, the global offset of the last
1521
+ DIE traversed by dwarf_child is returned through *offset */
1522
+ int dwarf_validate_die_sibling(Dwarf_Die /*sibling*/,Dwarf_Off* /*offset*/);
1523
+
1524
+ /* convenience functions, alternative to using dwarf_attrlist() */
1525
+ int dwarf_hasattr(Dwarf_Die /*die*/,
1526
+ Dwarf_Half /*attr*/,
1527
+ Dwarf_Bool * /*returned_bool*/,
1528
+ Dwarf_Error* /*error*/);
1529
+
1530
+ /* BEGIN: loclist_c interfaces
1531
+ NEW October 2015.
1532
+ This works for any attribute that identifies
1533
+ a loclist or a locexpr. When the attribute is a locexpr
1534
+ a single loclist (created by libdwarf)
1535
+ is attached to loclist_head. */
1536
+ int dwarf_get_loclist_c (Dwarf_Attribute /*attr*/,
1537
+ Dwarf_Loc_Head_c * /*loclist_head*/,
1538
+ Dwarf_Unsigned * /*locCount*/,
1539
+ Dwarf_Error * /*error*/);
1540
+
1541
+ int dwarf_get_locdesc_entry_c(Dwarf_Loc_Head_c /*loclist_head*/,
1542
+ Dwarf_Unsigned /*index*/,
1543
+
1544
+ /* identifies type of locdesc entry*/
1545
+ Dwarf_Small * /*lle_value_out*/,
1546
+ Dwarf_Addr * /*lowpc_out*/,
1547
+ Dwarf_Addr * /*hipc_out*/,
1548
+ Dwarf_Unsigned * /*loclist_count_out*/,
1549
+ Dwarf_Locdesc_c * /*locentry_out*/,
1550
+ Dwarf_Small * /*loclist_source_out*/, /* 0,1, or 2 */
1551
+ Dwarf_Unsigned * /*expression_offset_out*/,
1552
+ Dwarf_Unsigned * /*locdesc_offset_out*/,
1553
+ Dwarf_Error * /*error*/);
1554
+
1555
+ int dwarf_get_location_op_value_c(Dwarf_Locdesc_c /*locdesc*/,
1556
+ Dwarf_Unsigned /*index*/,
1557
+ Dwarf_Small * /*atom_out*/,
1558
+ Dwarf_Unsigned * /*operand1*/,
1559
+ Dwarf_Unsigned * /*operand2*/,
1560
+ Dwarf_Unsigned * /*operand3*/,
1561
+ Dwarf_Unsigned * /*offset_for_branch*/,
1562
+ Dwarf_Error* /*error*/);
1563
+
1564
+ int dwarf_loclist_from_expr_c(Dwarf_Debug dbg,
1565
+ Dwarf_Ptr expression_in,
1566
+ Dwarf_Unsigned expression_length,
1567
+ Dwarf_Half address_size,
1568
+ Dwarf_Half offset_size,
1569
+ Dwarf_Small dwarf_version,
1570
+ Dwarf_Loc_Head_c* loc_head,
1571
+ Dwarf_Unsigned * listlen,
1572
+ Dwarf_Error * error);
1573
+
1574
+ /* This frees all memory allocated by the applicable
1575
+ dwarf_get_loclist_c() */
1576
+ void dwarf_loc_head_c_dealloc(Dwarf_Loc_Head_c /*loclist_head*/);
1577
+
1578
+ /* END: loclist_c interfaces */
1579
+
1580
+
1581
+ /* As of 2015 the preferred interface
1582
+ is dwarf_get_loclist_c()
1583
+ and only dwarf_get_loclist_c() will work
1584
+ for DWARF5 (and also all earlier versions). */
1585
+ int dwarf_loclist_n(Dwarf_Attribute /*attr*/,
1586
+ Dwarf_Locdesc*** /*llbuf*/,
1587
+ Dwarf_Signed * /*locCount*/,
1588
+ Dwarf_Error* /*error*/);
1589
+
1590
+ /* The original interfaces. Please do not use this. */
1591
+ int dwarf_loclist(Dwarf_Attribute /*attr*/, /* inflexible! */
1592
+ Dwarf_Locdesc** /*llbuf*/,
1593
+ Dwarf_Signed * /*locCount*/,
1594
+ Dwarf_Error* /*error*/);
1595
+
1596
+ /* Extracts a dwarf expression from an expression byte stream.
1597
+ Useful to get expressions from DW_CFA_def_cfa_expression
1598
+ DW_CFA_expression DW_CFA_val_expression expression bytes.
1599
+ 27 April 2009: dwarf_loclist_from_expr() interface with
1600
+ no addr_size is obsolete but supported,
1601
+ use dwarf_loclist_from_expr_a() instead.
1602
+ */
1603
+ int dwarf_loclist_from_expr(Dwarf_Debug /*dbg*/,
1604
+ Dwarf_Ptr /* expression_in*/,
1605
+ Dwarf_Unsigned /* expression_length*/,
1606
+ Dwarf_Locdesc ** /* llbuf*/,
1607
+ Dwarf_Signed * /*listlen*/,
1608
+ Dwarf_Error * /* error*/ );
1609
+
1610
+ /* dwarf_loclist_from_expr_a() new 27 Apr 2009:
1611
+ added addr_size argument. */
1612
+ int dwarf_loclist_from_expr_a(Dwarf_Debug /*dbg*/,
1613
+ Dwarf_Ptr /*expression_in*/,
1614
+ Dwarf_Unsigned /*expression_length*/,
1615
+ Dwarf_Half /*addr_size*/,
1616
+ Dwarf_Locdesc ** /*llbuf*/,
1617
+ Dwarf_Signed * /*listlen*/,
1618
+ Dwarf_Error * /*error*/);
1619
+
1620
+ /* dwarf_loclist_from_expr_b() new 13 Nov 2012:
1621
+ added dwarf_version (DWARF version number
1622
+ of the applicable compilation unit)
1623
+ and offset_size arguments. Added for
1624
+ DW_OP_GNU_implicit_pointer. */
1625
+ int dwarf_loclist_from_expr_b(Dwarf_Debug /*dbg*/,
1626
+ Dwarf_Ptr /*expression_in*/ ,
1627
+ Dwarf_Unsigned /*expression_length*/ ,
1628
+ Dwarf_Half /*addr_size*/ ,
1629
+ Dwarf_Half /*offset_size*/ ,
1630
+ Dwarf_Small /*dwarf_version*/ ,
1631
+ Dwarf_Locdesc ** /*llbuf*/ ,
1632
+ Dwarf_Signed * /*listlen*/ ,
1633
+ Dwarf_Error * /*error*/ );
1634
+
1635
+ int dwarf_lowpc(Dwarf_Die /*die*/,
1636
+ Dwarf_Addr * /*returned_addr*/,
1637
+ Dwarf_Error* /*error*/);
1638
+
1639
+ /* When the highpc attribute is of class 'constant'
1640
+ it is not an address, it is an offset from the
1641
+ base address (such as lowpc) of the function.
1642
+ This is therefore a required interface for DWARF4
1643
+ style DW_AT_highpc. */
1644
+ int dwarf_highpc_b(Dwarf_Die /*die*/,
1645
+ Dwarf_Addr * /*return_value*/,
1646
+ Dwarf_Half * /*return_form*/,
1647
+ enum Dwarf_Form_Class * /*return_class*/,
1648
+ Dwarf_Error * /*error*/);
1649
+
1650
+ /* This works for DWARF2 and DWARF3 styles of DW_AT_highpc,
1651
+ but not for the DWARF4 class constant forms.
1652
+ If the FORM is of class constant this returns an error */
1653
+ int dwarf_highpc(Dwarf_Die /*die*/,
1654
+ Dwarf_Addr * /*returned_addr*/,
1655
+ Dwarf_Error* /*error*/);
1656
+
1657
+ int dwarf_bytesize(Dwarf_Die /*die*/,
1658
+ Dwarf_Unsigned * /*returned_size*/,
1659
+ Dwarf_Error* /*error*/);
1660
+
1661
+ int dwarf_bitsize(Dwarf_Die /*die*/,
1662
+ Dwarf_Unsigned * /*returned_size*/,
1663
+ Dwarf_Error* /*error*/);
1664
+
1665
+ int dwarf_bitoffset(Dwarf_Die /*die*/,
1666
+ Dwarf_Unsigned * /*returned_offset*/,
1667
+ Dwarf_Error* /*error*/);
1668
+
1669
+ int dwarf_srclang(Dwarf_Die /*die*/,
1670
+ Dwarf_Unsigned * /*returned_lang*/,
1671
+ Dwarf_Error* /*error*/);
1672
+
1673
+ int dwarf_arrayorder(Dwarf_Die /*die*/,
1674
+ Dwarf_Unsigned * /*returned_order*/,
1675
+ Dwarf_Error* /*error*/);
1676
+
1677
+ /* end of convenience function list */
1678
+
1679
+ /* this is the main interface to attributes of a DIE */
1680
+ int dwarf_attrlist(Dwarf_Die /*die*/,
1681
+ Dwarf_Attribute** /*attrbuf*/,
1682
+ Dwarf_Signed * /*attrcount*/,
1683
+ Dwarf_Error* /*error*/);
1684
+
1685
+ /* query operations for attributes */
1686
+ int dwarf_hasform(Dwarf_Attribute /*attr*/,
1687
+ Dwarf_Half /*form*/,
1688
+ Dwarf_Bool * /*returned_bool*/,
1689
+ Dwarf_Error* /*error*/);
1690
+
1691
+ int dwarf_whatform(Dwarf_Attribute /*attr*/,
1692
+ Dwarf_Half * /*returned_final_form*/,
1693
+ Dwarf_Error* /*error*/);
1694
+
1695
+ int dwarf_whatform_direct(Dwarf_Attribute /*attr*/,
1696
+ Dwarf_Half * /*returned_initial_form*/,
1697
+ Dwarf_Error* /*error*/);
1698
+
1699
+ int dwarf_whatattr(Dwarf_Attribute /*attr*/,
1700
+ Dwarf_Half * /*returned_attr_num*/,
1701
+ Dwarf_Error* /*error*/);
1702
+
1703
+ /*
1704
+ The following are concerned with the Primary Interface: getting
1705
+ the actual data values. One function per 'kind' of FORM.
1706
+ */
1707
+ /* dwarf_formref returns, thru return_offset, a CU-relative offset
1708
+ and does not allow DW_FORM_ref_addr*/
1709
+ int dwarf_formref(Dwarf_Attribute /*attr*/,
1710
+ Dwarf_Off* /*return_offset*/,
1711
+ Dwarf_Error* /*error*/);
1712
+ /* dwarf_global_formref returns, thru return_offset,
1713
+ a debug_info-relative offset and does allow all reference forms*/
1714
+ int dwarf_global_formref(Dwarf_Attribute /*attr*/,
1715
+ Dwarf_Off* /*return_offset*/,
1716
+ Dwarf_Error* /*error*/);
1717
+
1718
+ /* dwarf_formsig8 returns in the caller-provided 8 byte area
1719
+ the 8 bytes of a DW_FORM_ref_sig8. Not a string. */
1720
+ int dwarf_formsig8(Dwarf_Attribute /*attr*/,
1721
+ Dwarf_Sig8 * /*returned sig bytes*/,
1722
+ Dwarf_Error* /*error*/);
1723
+ /* dwarf_formsig8_b returns in the caller-provided 8 byte area
1724
+ the 8 bytes of a form const (DW_FORM_data8). Not a string. */
1725
+ int dwarf_formsig8_const(Dwarf_Attribute /*attr*/,
1726
+ Dwarf_Sig8 * /*returned sig bytes*/,
1727
+ Dwarf_Error* /*error*/);
1728
+
1729
+ int dwarf_formaddr(Dwarf_Attribute /*attr*/,
1730
+ Dwarf_Addr * /*returned_addr*/,
1731
+ Dwarf_Error* /*error*/);
1732
+
1733
+ /* Part of DebugFission. So a consumer can get the index when
1734
+ the object with the actual .debug_addr section is
1735
+ elsewhere. And so a print application can
1736
+ print the index. New May 2014*/
1737
+ int dwarf_get_debug_addr_index(Dwarf_Attribute /*attr*/,
1738
+ Dwarf_Unsigned * /*return_index*/,
1739
+ Dwarf_Error * /*error*/);
1740
+
1741
+ int dwarf_formflag(Dwarf_Attribute /*attr*/,
1742
+ Dwarf_Bool * /*returned_bool*/,
1743
+ Dwarf_Error* /*error*/);
1744
+
1745
+ int dwarf_formudata(Dwarf_Attribute /*attr*/,
1746
+ Dwarf_Unsigned * /*returned_val*/,
1747
+ Dwarf_Error* /*error*/);
1748
+
1749
+ int dwarf_formsdata(Dwarf_Attribute /*attr*/,
1750
+ Dwarf_Signed * /*returned_val*/,
1751
+ Dwarf_Error* /*error*/);
1752
+
1753
+ int dwarf_formblock(Dwarf_Attribute /*attr*/,
1754
+ Dwarf_Block ** /*returned_block*/,
1755
+ Dwarf_Error* /*error*/);
1756
+
1757
+ int dwarf_formstring(Dwarf_Attribute /*attr*/,
1758
+ char ** /*returned_string*/,
1759
+ Dwarf_Error* /*error*/);
1760
+
1761
+ /* DebugFission. So a DWARF print application can
1762
+ get the string index (DW_FORM_strx) and print it.
1763
+ A convenience function.
1764
+ New May 2014. */
1765
+ int
1766
+ dwarf_get_debug_str_index(Dwarf_Attribute /*attr*/,
1767
+ Dwarf_Unsigned * /*return_index*/,
1768
+ Dwarf_Error * /*error*/);
1769
+
1770
+
1771
+ int dwarf_formexprloc(Dwarf_Attribute /*attr*/,
1772
+ Dwarf_Unsigned * /*return_exprlen*/,
1773
+ Dwarf_Ptr * /*block_ptr*/,
1774
+ Dwarf_Error * /*error*/);
1775
+
1776
+
1777
+ /* end attribute query operations. */
1778
+
1779
+ /* Start line number operations */
1780
+ /* dwarf_srclines is the original interface from 1993. */
1781
+ int dwarf_srclines(Dwarf_Die /*die*/,
1782
+ Dwarf_Line** /*linebuf*/,
1783
+ Dwarf_Signed * /*linecount*/,
1784
+ Dwarf_Error* /*error*/);
1785
+
1786
+
1787
+ /* If we have two-level line tables, this will return the
1788
+ logicals table in linebuf and the actuals table in
1789
+ linebuf_actuals. For old-style (one-level) tables, it
1790
+ will return the single table through linebuf, and the
1791
+ value returned through linecount_actuals will be 0.
1792
+ The actual version number is returned through version.
1793
+ For two-level line tables, the version returned will
1794
+ be 0xf006. This interface can return data from two-level
1795
+ line tables, which are experimental.
1796
+ Most users will not wish to use dwarf_srclines_two_level() */
1797
+ int dwarf_srclines_two_level(Dwarf_Die /*die*/,
1798
+ Dwarf_Unsigned * /*version*/,
1799
+ Dwarf_Line** /*linebuf*/,
1800
+ Dwarf_Signed * /*linecount*/,
1801
+ Dwarf_Line** /*linebuf_actuals*/,
1802
+ Dwarf_Signed * /*linecount_actuals*/,
1803
+ Dwarf_Error* /*error*/);
1804
+
1805
+ /* dwarf_srclines_dealloc, created July 2005, is the
1806
+ appropriate method for deallocating what dwarf_srclines()
1807
+ and dwarf_srclines_two_level() return.
1808
+ More complete free than using dwarf_dealloc directly.
1809
+
1810
+ When dwarf_srclines_two_level returns two line tables
1811
+ user code should call dwarf_srclines_dealloc()
1812
+ once on each linebuf returned by dwarf_srclines_two_level()
1813
+ first on linebuf_actuals and then on linebuf{_logicals}. */
1814
+
1815
+ void dwarf_srclines_dealloc(Dwarf_Debug /*dbg*/,
1816
+ Dwarf_Line* /*linebuf*/,
1817
+ Dwarf_Signed /*count */);
1818
+
1819
+
1820
+ /* New October 2015, must be used to deallocating
1821
+ what is allocated by dwarf_srclines_b() and
1822
+ dwarf_srclines_from_linecontext() use.
1823
+ Works for DWARF2,3,4,5 and for experimental line tables.
1824
+ New work should use the new Dwarf_Line_Context
1825
+ interfaces.
1826
+ This also opens a Dwarf_Line_Context struct which
1827
+ is used by dwarf_srcfiles_b()
1828
+ This interface only reads the line table header, so
1829
+ it takes relatively little time.
1830
+ *is_single_table will be set non-zero for all standard dwarf line sections.
1831
+ *is_single_table will be set zero for line sections with the
1832
+ two_level line table extension (which will have *version_out 0xf006). */
1833
+ int dwarf_srclines_b(Dwarf_Die /*die*/,
1834
+ Dwarf_Unsigned * /* version_out*/,
1835
+ Dwarf_Small * /* table_count */,
1836
+ Dwarf_Line_Context * /* linecontext*/,
1837
+ Dwarf_Error * /* error*/);
1838
+
1839
+ /* Functions passing in a Dwarf_Line_Context are only
1840
+ available if dwarf_srclines_b() was used to access
1841
+ line table information. */
1842
+ /* New October 2015. Returns line details.
1843
+ Works for DWARF2,3,4,5. If linecount
1844
+ returned is zero this is a line table with no lines.*/
1845
+ int dwarf_srclines_from_linecontext(
1846
+ Dwarf_Line_Context /*line_context*/,
1847
+ Dwarf_Line ** /*linebuf*/,
1848
+ Dwarf_Signed * /*linecount*/,
1849
+ Dwarf_Error * /* error*/);
1850
+
1851
+ /* New October 2015. Returns line details.
1852
+ Works for DWARF2,3,4,5 and for experimental
1853
+ two-level line tables. A single level table will
1854
+ have *linebuf_actuals and *linecount_actuals set
1855
+ to 0. */
1856
+ int dwarf_srclines_two_level_from_linecontext(
1857
+ Dwarf_Line_Context /*line_context*/,
1858
+ Dwarf_Line ** /*linebuf */,
1859
+ Dwarf_Signed * /*linecount*/,
1860
+ Dwarf_Line ** /*linebuf_actuals*/,
1861
+ Dwarf_Signed * /*linecount_actuals*/,
1862
+ Dwarf_Error * /* error*/);
1863
+
1864
+ /* dwarf_srclines_dealloc_b(), created October 2015, is the
1865
+ appropriate method for deallocating everything
1866
+ and dwarf_srclines_from_linecontext(),
1867
+ dwarf_srclines_twolevel_from_linecontext(),
1868
+ and dwarf_srclines_b() allocate. */
1869
+ void dwarf_srclines_dealloc_b(Dwarf_Line_Context /*line_context*/);
1870
+
1871
+ /* New October 2015. */
1872
+ /* The offset is in the relevent .debug_line or .debug_line.dwo
1873
+ section (and in a split dwarf package file includes)
1874
+ the base line table offset). */
1875
+ int dwarf_srclines_table_offset(Dwarf_Line_Context /*line_context*/,
1876
+ Dwarf_Unsigned * /*offset*/,
1877
+ Dwarf_Error * /* error*/);
1878
+
1879
+ /* New October 2015. */
1880
+ /* Compilation Directory name for the current CU.
1881
+ section (and in a split dwarf package file includes)
1882
+ the base line table offset). Do not free() the string,
1883
+ it is in a dwarf section. */
1884
+ int dwarf_srclines_comp_dir(Dwarf_Line_Context /*line_context*/,
1885
+ const char ** /*compilation_directory*/,
1886
+ Dwarf_Error * /*error*/);
1887
+
1888
+ /* New October 2015. Part of the two-level line table extension. */
1889
+ /* Count is the real count of suprogram array entries. */
1890
+ int dwarf_srclines_subprog_count(Dwarf_Line_Context /*line_context*/,
1891
+ Dwarf_Signed * /*count*/,
1892
+ Dwarf_Error * /* error*/);
1893
+
1894
+ /* New October 2015. */
1895
+ /* Index starts with 1, last is 'count' */
1896
+ int dwarf_srclines_subprog_data(Dwarf_Line_Context /*line_context*/,
1897
+ Dwarf_Signed /*index*/,
1898
+ const char ** /*name*/,
1899
+ Dwarf_Unsigned * /*decl_file*/,
1900
+ Dwarf_Unsigned * /*decl_line*/,
1901
+ Dwarf_Error * /*error*/);
1902
+
1903
+ /* New October 2015. */
1904
+ /* Count is the real count of files array entries. */
1905
+ int dwarf_srclines_files_count(Dwarf_Line_Context /*line_context*/,
1906
+ Dwarf_Signed * /*count*/,
1907
+ Dwarf_Error * /*error*/);
1908
+
1909
+ /* New October 2015. */
1910
+ /* Unlike dwarf_srcfiles() this returns the raw file table
1911
+ strings without the directory being prefixed.
1912
+ Index starts with 1, last is 'count' */
1913
+ int dwarf_srclines_files_data(Dwarf_Line_Context /*line_context*/,
1914
+ Dwarf_Signed /*index*/,
1915
+ const char ** /*name*/,
1916
+ Dwarf_Unsigned * /*directory_index*/,
1917
+ Dwarf_Unsigned * /*last_mod_time*/,
1918
+ Dwarf_Unsigned * /*file_length*/,
1919
+ Dwarf_Error * /* error*/);
1920
+
1921
+ /* New October 2015. */
1922
+ /* Count is the real count of include array entries. */
1923
+ int dwarf_srclines_include_dir_count(Dwarf_Line_Context /*line_context*/,
1924
+ Dwarf_Signed * /*count*/,
1925
+ Dwarf_Error * /* error*/);
1926
+
1927
+ /* New October 2015. */
1928
+ /* Index starts with 1, last is 'count' */
1929
+ int dwarf_srclines_include_dir_data(Dwarf_Line_Context /*line_context*/,
1930
+ Dwarf_Signed /*index*/,
1931
+ const char ** /*name*/,
1932
+ Dwarf_Error * /* error*/);
1933
+
1934
+ /* New October 2015. */
1935
+ /* The DWARF version number of this compile-unit
1936
+ in the .debug_lines section and the number of
1937
+ actual tables:0 (header with no lines),
1938
+ 1 (standard table), or 2 (experimental). */
1939
+ int dwarf_srclines_version(Dwarf_Line_Context /*line_context*/,
1940
+ Dwarf_Unsigned * /*version*/,
1941
+ Dwarf_Small * /*table_count*/,
1942
+ Dwarf_Error * /*error*/);
1943
+
1944
+
1945
+ /* While 'filecount' is signed, the value
1946
+ returned through the pointer is never negative.
1947
+ Original libdwarf from 199x. */
1948
+ int dwarf_srcfiles(Dwarf_Die /*die*/,
1949
+ char*** /*srcfiles*/,
1950
+ Dwarf_Signed * /*filecount*/,
1951
+ Dwarf_Error* /*error*/);
1952
+
1953
+ /* New October 2015.
1954
+ Returns the same data as
1955
+ dwarf_srcfiles, but is based on
1956
+ a Dwarf_Line_Context created by
1957
+ dwarf_srclines_b(). Using this avoids
1958
+ rereading the line table header for this CU. */
1959
+ int dwarf_srcfiles_b(Dwarf_Line_Context /*context*/,
1960
+ Dwarf_Unsigned * /*version*/,
1961
+ char *** /*srcfiles*/,
1962
+ Dwarf_Signed * /*filecount*/,
1963
+ Dwarf_Error * /*error*/);
1964
+
1965
+ int dwarf_linebeginstatement(Dwarf_Line /*line*/,
1966
+ Dwarf_Bool * /*returned_bool*/,
1967
+ Dwarf_Error* /*error*/);
1968
+
1969
+ int dwarf_lineendsequence(Dwarf_Line /*line*/,
1970
+ Dwarf_Bool * /*returned_bool*/,
1971
+ Dwarf_Error* /*error*/);
1972
+
1973
+ int dwarf_lineno(Dwarf_Line /*line*/,
1974
+ Dwarf_Unsigned * /*returned_lineno*/,
1975
+ Dwarf_Error* /*error*/);
1976
+
1977
+ int dwarf_line_srcfileno(Dwarf_Line /*line*/,
1978
+ Dwarf_Unsigned * /*ret_fileno*/,
1979
+ Dwarf_Error * /*error*/);
1980
+
1981
+ /* Is the line address from DW_LNS_set_address? */
1982
+ int dwarf_line_is_addr_set(Dwarf_Line /*line*/,
1983
+ Dwarf_Bool * /*is_addr_set*/,
1984
+ Dwarf_Error * /*error*/);
1985
+
1986
+ int dwarf_lineaddr(Dwarf_Line /*line*/,
1987
+ Dwarf_Addr * /*returned_addr*/,
1988
+ Dwarf_Error* /*error*/);
1989
+
1990
+ /* dwarf_lineoff() is OBSOLETE as of December 2011. Do not use. */
1991
+ int dwarf_lineoff(Dwarf_Line /*line*/,
1992
+ Dwarf_Signed * /*returned_lineoffset*/,
1993
+ Dwarf_Error* /*error*/);
1994
+
1995
+ /* dwarf_lineoff_b() correctly returns an unsigned column number
1996
+ through the pointer returned_lineoffset.
1997
+ dwarf_lineoff_b() is new in December 2011. */
1998
+ int dwarf_lineoff_b(Dwarf_Line /*line*/,
1999
+ Dwarf_Unsigned * /*returned_lineoffset*/,
2000
+ Dwarf_Error* /*error*/);
2001
+
2002
+ int dwarf_linesrc(Dwarf_Line /*line*/,
2003
+ char ** /*returned_name*/,
2004
+ Dwarf_Error* /*error*/);
2005
+
2006
+ int dwarf_lineblock(Dwarf_Line /*line*/,
2007
+ Dwarf_Bool * /*returned_bool*/,
2008
+ Dwarf_Error* /*error*/);
2009
+
2010
+ /* We gather these into one call as it's likely one
2011
+ will want all or none of them. */
2012
+ int dwarf_prologue_end_etc(Dwarf_Line /* line */,
2013
+ Dwarf_Bool * /*prologue_end*/,
2014
+ Dwarf_Bool * /*eplogue_begin*/,
2015
+ Dwarf_Unsigned * /* isa */,
2016
+ Dwarf_Unsigned * /* discriminator */,
2017
+ Dwarf_Error * /*error*/);
2018
+ /* End line table operations */
2019
+
2020
+ /* Two-level line tables:
2021
+ When reading from an actuals table, dwarf_line_logical()
2022
+ returns the logical row number for the line. */
2023
+ int dwarf_linelogical(Dwarf_Line /*line*/,
2024
+ Dwarf_Unsigned * /*returned_logical*/,
2025
+ Dwarf_Error* /*error*/);
2026
+
2027
+ /* Two-level line tables:
2028
+ When reading from a logicals table, dwarf_linecontext()
2029
+ returns the logical row number corresponding the the
2030
+ calling context for an inlined call. */
2031
+ int dwarf_linecontext(Dwarf_Line /*line*/,
2032
+ Dwarf_Unsigned * /*returned_context*/,
2033
+ Dwarf_Error* /*error*/);
2034
+
2035
+ /* Two-level line tables:
2036
+ When reading from a logicals table, dwarf_linesubprogno()
2037
+ returns the index in the subprograms table of the inlined
2038
+ subprogram. */
2039
+ int dwarf_line_subprogno(Dwarf_Line /*line*/,
2040
+ Dwarf_Unsigned * /*ret_subprogno*/,
2041
+ Dwarf_Error * /*error*/);
2042
+
2043
+ /* Two-level line tables:
2044
+ When reading from a logicals table, dwarf_linesubprog()
2045
+ returns the name of the inlined subprogram, its declaration
2046
+ filename, and its declaration line number, if available. */
2047
+ int dwarf_line_subprog(Dwarf_Line /*line*/,
2048
+ char ** /*returned_subprog_name*/,
2049
+ char ** /*returned_filename*/,
2050
+ Dwarf_Unsigned * /*returned_lineno*/,
2051
+ Dwarf_Error * /*error*/);
2052
+ /* End of line table interfaces. */
2053
+
2054
+ /* global name space operations (.debug_pubnames access) */
2055
+ int dwarf_get_globals(Dwarf_Debug /*dbg*/,
2056
+ Dwarf_Global** /*globals*/,
2057
+ Dwarf_Signed * /*number_of_globals*/,
2058
+ Dwarf_Error* /*error*/);
2059
+ void dwarf_globals_dealloc(Dwarf_Debug /*dbg*/,
2060
+ Dwarf_Global* /*globals*/,
2061
+ Dwarf_Signed /*number_of_globals*/);
2062
+
2063
+ int dwarf_globname(Dwarf_Global /*glob*/,
2064
+ char ** /*returned_name*/,
2065
+ Dwarf_Error* /*error*/);
2066
+
2067
+ int dwarf_global_die_offset(Dwarf_Global /*global*/,
2068
+ Dwarf_Off* /*return_offset*/,
2069
+ Dwarf_Error * /*error*/);
2070
+
2071
+ /* This returns the CU die global offset if one knows the
2072
+ CU header global offset.
2073
+ See also dwarf_CU_dieoffset_given_die(). */
2074
+ int dwarf_get_cu_die_offset_given_cu_header_offset(
2075
+ Dwarf_Debug /*dbg*/,
2076
+ Dwarf_Off /*in_cu_header_offset*/,
2077
+ Dwarf_Off * /*out_cu_die_offset*/,
2078
+ Dwarf_Error * /*err*/);
2079
+
2080
+ /* The _b form is new October 2011. */
2081
+ int dwarf_get_cu_die_offset_given_cu_header_offset_b(
2082
+ Dwarf_Debug /*dbg*/,
2083
+ Dwarf_Off /*in_cu_header_offset*/,
2084
+ Dwarf_Bool /*is_info. True means look in debug_Info,
2085
+ false use debug_types.*/,
2086
+ Dwarf_Off * /*out_cu_die_offset*/,
2087
+ Dwarf_Error * /*err*/);
2088
+
2089
+ #ifdef __sgi /* pragma is sgi MIPS only */
2090
+ #pragma optional dwarf_get_cu_die_offset_given_cu_header_offset
2091
+ #endif
2092
+
2093
+ int dwarf_global_cu_offset(Dwarf_Global /*global*/,
2094
+ Dwarf_Off* /*return_offset*/,
2095
+ Dwarf_Error* /*error*/);
2096
+
2097
+ int dwarf_global_name_offsets(Dwarf_Global /*global*/,
2098
+ char ** /*returned_name*/,
2099
+ Dwarf_Off* /*die_offset*/,
2100
+ Dwarf_Off* /*cu_offset*/,
2101
+ Dwarf_Error* /*error*/);
2102
+
2103
+ /* Static function name operations. */
2104
+ int dwarf_get_funcs(Dwarf_Debug /*dbg*/,
2105
+ Dwarf_Func** /*funcs*/,
2106
+ Dwarf_Signed * /*number_of_funcs*/,
2107
+ Dwarf_Error* /*error*/);
2108
+ void dwarf_funcs_dealloc(Dwarf_Debug /*dbg*/,
2109
+ Dwarf_Func* /*funcs*/,
2110
+ Dwarf_Signed /*number_of_funcs*/);
2111
+
2112
+ int dwarf_funcname(Dwarf_Func /*func*/,
2113
+ char ** /*returned_name*/,
2114
+ Dwarf_Error* /*error*/);
2115
+
2116
+ int dwarf_func_die_offset(Dwarf_Func /*func*/,
2117
+ Dwarf_Off* /*return_offset*/,
2118
+ Dwarf_Error* /*error*/);
2119
+
2120
+ int dwarf_func_cu_offset(Dwarf_Func /*func*/,
2121
+ Dwarf_Off* /*return_offset*/,
2122
+ Dwarf_Error* /*error*/);
2123
+
2124
+ int dwarf_func_name_offsets(Dwarf_Func /*func*/,
2125
+ char ** /*returned_name*/,
2126
+ Dwarf_Off* /*die_offset*/,
2127
+ Dwarf_Off* /*cu_offset*/,
2128
+ Dwarf_Error* /*error*/);
2129
+
2130
+ /* User-defined type name operations, SGI IRIX .debug_typenames section.
2131
+ Same content as DWARF3 .debug_pubtypes, but defined years before
2132
+ .debug_pubtypes was defined. SGI IRIX only. */
2133
+ int dwarf_get_types(Dwarf_Debug /*dbg*/,
2134
+ Dwarf_Type** /*types*/,
2135
+ Dwarf_Signed * /*number_of_types*/,
2136
+ Dwarf_Error* /*error*/);
2137
+ void dwarf_types_dealloc(Dwarf_Debug /*dbg*/,
2138
+ Dwarf_Type* /*types*/,
2139
+ Dwarf_Signed /*number_of_types*/);
2140
+
2141
+
2142
+ int dwarf_typename(Dwarf_Type /*type*/,
2143
+ char ** /*returned_name*/,
2144
+ Dwarf_Error* /*error*/);
2145
+
2146
+ int dwarf_type_die_offset(Dwarf_Type /*type*/,
2147
+ Dwarf_Off* /*return_offset*/,
2148
+ Dwarf_Error* /*error*/);
2149
+
2150
+ int dwarf_type_cu_offset(Dwarf_Type /*type*/,
2151
+ Dwarf_Off* /*return_offset*/,
2152
+ Dwarf_Error* /*error*/);
2153
+
2154
+ int dwarf_type_name_offsets(Dwarf_Type /*type*/,
2155
+ char ** /*returned_name*/,
2156
+ Dwarf_Off* /*die_offset*/,
2157
+ Dwarf_Off* /*cu_offset*/,
2158
+ Dwarf_Error* /*error*/);
2159
+
2160
+ /* User-defined type name operations, DWARF3 .debug_pubtypes section.
2161
+ */
2162
+ int dwarf_get_pubtypes(Dwarf_Debug /*dbg*/,
2163
+ Dwarf_Type** /*types*/,
2164
+ Dwarf_Signed * /*number_of_types*/,
2165
+ Dwarf_Error* /*error*/);
2166
+ void dwarf_pubtypes_dealloc(Dwarf_Debug /*dbg*/,
2167
+ Dwarf_Type* /*pubtypes*/,
2168
+ Dwarf_Signed /*number_of_pubtypes*/);
2169
+
2170
+
2171
+ int dwarf_pubtypename(Dwarf_Type /*type*/,
2172
+ char ** /*returned_name*/,
2173
+ Dwarf_Error* /*error*/);
2174
+
2175
+ int dwarf_pubtype_die_offset(Dwarf_Type /*type*/,
2176
+ Dwarf_Off* /*return_offset*/,
2177
+ Dwarf_Error* /*error*/);
2178
+
2179
+ int dwarf_pubtype_cu_offset(Dwarf_Type /*type*/,
2180
+ Dwarf_Off* /*return_offset*/,
2181
+ Dwarf_Error* /*error*/);
2182
+
2183
+ int dwarf_pubtype_name_offsets(Dwarf_Type /*type*/,
2184
+ char ** /*returned_name*/,
2185
+ Dwarf_Off* /*die_offset*/,
2186
+ Dwarf_Off* /*cu_offset*/,
2187
+ Dwarf_Error* /*error*/);
2188
+
2189
+ /* File-scope static variable name operations. */
2190
+ int dwarf_get_vars(Dwarf_Debug /*dbg*/,
2191
+ Dwarf_Var** /*vars*/,
2192
+ Dwarf_Signed * /*number_of_vars*/,
2193
+ Dwarf_Error* /*error*/);
2194
+ void dwarf_vars_dealloc(Dwarf_Debug /*dbg*/,
2195
+ Dwarf_Var* /*vars*/,
2196
+ Dwarf_Signed /*number_of_vars*/);
2197
+
2198
+
2199
+ int dwarf_varname(Dwarf_Var /*var*/,
2200
+ char ** /*returned_name*/,
2201
+ Dwarf_Error* /*error*/);
2202
+
2203
+ int dwarf_var_die_offset(Dwarf_Var /*var*/,
2204
+ Dwarf_Off* /*return_offset*/,
2205
+ Dwarf_Error* /*error*/);
2206
+
2207
+ int dwarf_var_cu_offset(Dwarf_Var /*var*/,
2208
+ Dwarf_Off* /*return_offset*/,
2209
+ Dwarf_Error* /*error*/);
2210
+
2211
+ int dwarf_var_name_offsets(Dwarf_Var /*var*/,
2212
+ char ** /*returned_name*/,
2213
+ Dwarf_Off* /*die_offset*/,
2214
+ Dwarf_Off* /*cu_offset*/,
2215
+ Dwarf_Error* /*error*/);
2216
+
2217
+ /* weak name operations. */
2218
+ int dwarf_get_weaks(Dwarf_Debug /*dbg*/,
2219
+ Dwarf_Weak** /*weaks*/,
2220
+ Dwarf_Signed * /*number_of_weaks*/,
2221
+ Dwarf_Error* /*error*/);
2222
+ void dwarf_weaks_dealloc(Dwarf_Debug /*dbg*/,
2223
+ Dwarf_Weak* /*weaks*/,
2224
+ Dwarf_Signed /*number_of_weaks*/);
2225
+
2226
+
2227
+ int dwarf_weakname(Dwarf_Weak /*weak*/,
2228
+ char ** /*returned_name*/,
2229
+ Dwarf_Error* /*error*/);
2230
+
2231
+ int dwarf_weak_die_offset(Dwarf_Weak /*weak*/,
2232
+ Dwarf_Off* /*return_offset*/,
2233
+ Dwarf_Error* /*error*/);
2234
+
2235
+ int dwarf_weak_cu_offset(Dwarf_Weak /*weak*/,
2236
+ Dwarf_Off* /*return_offset*/,
2237
+ Dwarf_Error* /*error*/);
2238
+
2239
+ int dwarf_weak_name_offsets(Dwarf_Weak /*weak*/,
2240
+ char ** /*returned_name*/,
2241
+ Dwarf_Off* /*die_offset*/,
2242
+ Dwarf_Off* /*cu_offset*/,
2243
+ Dwarf_Error* /*error*/);
2244
+
2245
+ /* location list section operation. (.debug_loc access) */
2246
+ int dwarf_get_loclist_entry(Dwarf_Debug /*dbg*/,
2247
+ Dwarf_Unsigned /*offset*/,
2248
+ Dwarf_Addr* /*hipc*/,
2249
+ Dwarf_Addr* /*lopc*/,
2250
+ Dwarf_Ptr* /*data*/,
2251
+ Dwarf_Unsigned* /*entry_len*/,
2252
+ Dwarf_Unsigned* /*next_entry*/,
2253
+ Dwarf_Error* /*error*/);
2254
+
2255
+ /* abbreviation section operations */
2256
+ int dwarf_get_abbrev(Dwarf_Debug /*dbg*/,
2257
+ Dwarf_Unsigned /*offset*/,
2258
+ Dwarf_Abbrev * /*returned_abbrev*/,
2259
+ Dwarf_Unsigned* /*length*/,
2260
+ Dwarf_Unsigned* /*attr_count*/,
2261
+ Dwarf_Error* /*error*/);
2262
+
2263
+ int dwarf_get_abbrev_tag(Dwarf_Abbrev /*abbrev*/,
2264
+ Dwarf_Half* /*return_tag_number*/,
2265
+ Dwarf_Error* /*error*/);
2266
+ int dwarf_get_abbrev_code(Dwarf_Abbrev /*abbrev*/,
2267
+ Dwarf_Unsigned* /*return_code_number*/,
2268
+ Dwarf_Error* /*error*/);
2269
+ /* See comments in dwarf_abbrev.c. Not an entirely safe function. */
2270
+ int dwarf_get_abbrev_count(Dwarf_Debug /*dbg*/);
2271
+
2272
+ int dwarf_get_abbrev_children_flag(Dwarf_Abbrev /*abbrev*/,
2273
+ Dwarf_Signed* /*return_flag*/,
2274
+ Dwarf_Error* /*error*/);
2275
+
2276
+ int dwarf_get_abbrev_entry(Dwarf_Abbrev /*abbrev*/,
2277
+ Dwarf_Signed /*index*/,
2278
+ Dwarf_Half * /*returned_attr_num*/,
2279
+ Dwarf_Signed* /*form*/,
2280
+ Dwarf_Off* /*offset*/,
2281
+ Dwarf_Error* /*error*/);
2282
+
2283
+ /* consumer string section operation */
2284
+ int dwarf_get_str(Dwarf_Debug /*dbg*/,
2285
+ Dwarf_Off /*offset*/,
2286
+ char** /*string*/,
2287
+ Dwarf_Signed * /*strlen_of_string*/,
2288
+ Dwarf_Error* /*error*/);
2289
+
2290
+ /* Consumer op on gnu .eh_frame info */
2291
+ int dwarf_get_fde_list_eh(
2292
+ Dwarf_Debug /*dbg*/,
2293
+ Dwarf_Cie** /*cie_data*/,
2294
+ Dwarf_Signed* /*cie_element_count*/,
2295
+ Dwarf_Fde** /*fde_data*/,
2296
+ Dwarf_Signed* /*fde_element_count*/,
2297
+ Dwarf_Error* /*error*/);
2298
+
2299
+
2300
+ /* consumer operations on frame info: .debug_frame */
2301
+ int dwarf_get_fde_list(Dwarf_Debug /*dbg*/,
2302
+ Dwarf_Cie** /*cie_data*/,
2303
+ Dwarf_Signed* /*cie_element_count*/,
2304
+ Dwarf_Fde** /*fde_data*/,
2305
+ Dwarf_Signed* /*fde_element_count*/,
2306
+ Dwarf_Error* /*error*/);
2307
+
2308
+ /* Release storage gotten by dwarf_get_fde_list_eh() or
2309
+ dwarf_get_fde_list() */
2310
+ void dwarf_fde_cie_list_dealloc(Dwarf_Debug dbg,
2311
+ Dwarf_Cie *cie_data,
2312
+ Dwarf_Signed cie_element_count,
2313
+ Dwarf_Fde *fde_data,
2314
+ Dwarf_Signed fde_element_count);
2315
+
2316
+
2317
+
2318
+ int dwarf_get_fde_range(Dwarf_Fde /*fde*/,
2319
+ Dwarf_Addr* /*low_pc*/,
2320
+ Dwarf_Unsigned* /*func_length*/,
2321
+ Dwarf_Ptr* /*fde_bytes*/,
2322
+ Dwarf_Unsigned* /*fde_byte_length*/,
2323
+ Dwarf_Off* /*cie_offset*/,
2324
+ Dwarf_Signed* /*cie_index*/,
2325
+ Dwarf_Off* /*fde_offset*/,
2326
+ Dwarf_Error* /*error*/);
2327
+
2328
+ /* Useful for IRIX only: see dwarf_get_cie_augmentation_data()
2329
+ dwarf_get_fde_augmentation_data() for GNU .eh_frame. */
2330
+ int dwarf_get_fde_exception_info(Dwarf_Fde /*fde*/,
2331
+ Dwarf_Signed* /* offset_into_exception_tables */,
2332
+ Dwarf_Error* /*error*/);
2333
+
2334
+
2335
+ int dwarf_get_cie_of_fde(Dwarf_Fde /*fde*/,
2336
+ Dwarf_Cie * /*cie_returned*/,
2337
+ Dwarf_Error* /*error*/);
2338
+
2339
+ int dwarf_get_cie_info_b(Dwarf_Cie /*cie*/,
2340
+ Dwarf_Unsigned * /*bytes_in_cie*/,
2341
+ Dwarf_Small* /*version*/,
2342
+ char ** /*augmenter*/,
2343
+ Dwarf_Unsigned* /*code_alignment_factor*/,
2344
+ Dwarf_Signed* /*data_alignment_factor*/,
2345
+ Dwarf_Half* /*return_address_register_rule*/,
2346
+ Dwarf_Ptr* /*initial_instructions*/,
2347
+ Dwarf_Unsigned* /*initial_instructions_length*/,
2348
+ Dwarf_Half* /*offset_size*/,
2349
+ Dwarf_Error* /*error*/);
2350
+ int dwarf_get_cie_info(Dwarf_Cie /*cie*/,
2351
+ Dwarf_Unsigned * /*bytes_in_cie*/,
2352
+ Dwarf_Small* /*version*/,
2353
+ char ** /*augmenter*/,
2354
+ Dwarf_Unsigned* /*code_alignment_factor*/,
2355
+ Dwarf_Signed* /*data_alignment_factor*/,
2356
+ Dwarf_Half* /*return_address_register_rule*/,
2357
+ Dwarf_Ptr* /*initial_instructions*/,
2358
+ Dwarf_Unsigned* /*initial_instructions_length*/,
2359
+ Dwarf_Error* /*error*/);
2360
+
2361
+ /* dwarf_get_cie_index new September 2009. */
2362
+ int dwarf_get_cie_index(
2363
+ Dwarf_Cie /*cie*/,
2364
+ Dwarf_Signed* /*index*/,
2365
+ Dwarf_Error* /*error*/ );
2366
+
2367
+
2368
+ int dwarf_get_fde_instr_bytes(Dwarf_Fde /*fde*/,
2369
+ Dwarf_Ptr * /*outinstrs*/, Dwarf_Unsigned * /*outlen*/,
2370
+ Dwarf_Error * /*error*/);
2371
+
2372
+ int dwarf_get_fde_info_for_all_regs(Dwarf_Fde /*fde*/,
2373
+ Dwarf_Addr /*pc_requested*/,
2374
+ Dwarf_Regtable* /*reg_table*/,
2375
+ Dwarf_Addr* /*row_pc*/,
2376
+ Dwarf_Error* /*error*/);
2377
+
2378
+ int dwarf_get_fde_info_for_all_regs3(Dwarf_Fde /*fde*/,
2379
+ Dwarf_Addr /*pc_requested*/,
2380
+ Dwarf_Regtable3* /*reg_table*/,
2381
+ Dwarf_Addr* /*row_pc*/,
2382
+ Dwarf_Error* /*error*/);
2383
+
2384
+ /* In this older interface DW_FRAME_CFA_COL is a meaningful
2385
+ column (which does not work well with DWARF3 or
2386
+ non-MIPS architectures). */
2387
+ int dwarf_get_fde_info_for_reg(Dwarf_Fde /*fde*/,
2388
+ Dwarf_Half /*table_column*/,
2389
+ Dwarf_Addr /*pc_requested*/,
2390
+ Dwarf_Signed* /*offset_relevant*/,
2391
+ Dwarf_Signed* /*register*/,
2392
+ Dwarf_Signed* /*offset*/,
2393
+ Dwarf_Addr* /*row_pc*/,
2394
+ Dwarf_Error* /*error*/);
2395
+
2396
+ /* See discussion of dw_value_type, libdwarf.h.
2397
+ Use of DW_FRAME_CFA_COL is not meaningful in this interface.
2398
+ See dwarf_get_fde_info_for_cfa_reg3().
2399
+ */
2400
+ /* dwarf_get_fde_info_for_reg3 is useful on a single column, but
2401
+ it is inefficient to iterate across all table_columns using this
2402
+ function. Instead call dwarf_get_fde_info_for_all_regs3() and index
2403
+ into the table it fills in. */
2404
+ int dwarf_get_fde_info_for_reg3(Dwarf_Fde /*fde*/,
2405
+ Dwarf_Half /*table_column*/,
2406
+ Dwarf_Addr /*pc_requested*/,
2407
+ Dwarf_Small * /*value_type*/,
2408
+ Dwarf_Signed * /*offset_relevant*/,
2409
+ Dwarf_Signed* /*register*/,
2410
+ Dwarf_Signed* /*offset_or_block_len*/,
2411
+ Dwarf_Ptr * /*block_ptr */,
2412
+ Dwarf_Addr* /*row_pc_out*/,
2413
+ Dwarf_Error* /*error*/);
2414
+
2415
+ /* Use this to get the cfa. */
2416
+ int dwarf_get_fde_info_for_cfa_reg3(Dwarf_Fde /*fde*/,
2417
+ Dwarf_Addr /*pc_requested*/,
2418
+ Dwarf_Small * /*value_type*/,
2419
+ Dwarf_Signed * /*offset_relevant*/,
2420
+ Dwarf_Signed* /*register*/,
2421
+ Dwarf_Signed* /*offset_or_block_len*/,
2422
+ Dwarf_Ptr * /*block_ptr */,
2423
+ Dwarf_Addr* /*row_pc_out*/,
2424
+ Dwarf_Error* /*error*/);
2425
+
2426
+ int dwarf_get_fde_for_die(Dwarf_Debug /*dbg*/,
2427
+ Dwarf_Die /*subr_die */,
2428
+ Dwarf_Fde * /*returned_fde*/,
2429
+ Dwarf_Error* /*error*/);
2430
+
2431
+ int dwarf_get_fde_n(Dwarf_Fde* /*fde_data*/,
2432
+ Dwarf_Unsigned /*fde_index*/,
2433
+ Dwarf_Fde * /*returned_fde*/,
2434
+ Dwarf_Error* /*error*/);
2435
+
2436
+ int dwarf_get_fde_at_pc(Dwarf_Fde* /*fde_data*/,
2437
+ Dwarf_Addr /*pc_of_interest*/,
2438
+ Dwarf_Fde * /*returned_fde*/,
2439
+ Dwarf_Addr* /*lopc*/,
2440
+ Dwarf_Addr* /*hipc*/,
2441
+ Dwarf_Error* /*error*/);
2442
+
2443
+ /* GNU .eh_frame augmentation information, raw form, see
2444
+ Linux Standard Base Core Specification version 3.0 . */
2445
+ int dwarf_get_cie_augmentation_data(Dwarf_Cie /* cie*/,
2446
+ Dwarf_Small ** /* augdata */,
2447
+ Dwarf_Unsigned * /* augdata_len */,
2448
+ Dwarf_Error* /*error*/);
2449
+ /* GNU .eh_frame augmentation information, raw form, see
2450
+ Linux Standard Base Core Specification version 3.0 . */
2451
+ int dwarf_get_fde_augmentation_data(Dwarf_Fde /* fde*/,
2452
+ Dwarf_Small ** /* augdata */,
2453
+ Dwarf_Unsigned * /* augdata_len */,
2454
+ Dwarf_Error* /*error*/);
2455
+
2456
+ int dwarf_expand_frame_instructions(Dwarf_Cie /*cie*/,
2457
+ Dwarf_Ptr /*instruction*/,
2458
+ Dwarf_Unsigned /*i_length*/,
2459
+ Dwarf_Frame_Op** /*returned_op_list*/,
2460
+ Dwarf_Signed* /*op_count*/,
2461
+ Dwarf_Error* /*error*/);
2462
+
2463
+ /* Operations on .debug_aranges. */
2464
+ int dwarf_get_aranges(Dwarf_Debug /*dbg*/,
2465
+ Dwarf_Arange** /*aranges*/,
2466
+ Dwarf_Signed * /*arange_count*/,
2467
+ Dwarf_Error* /*error*/);
2468
+
2469
+
2470
+
2471
+ int dwarf_get_arange(
2472
+ Dwarf_Arange* /*aranges*/,
2473
+ Dwarf_Unsigned /*arange_count*/,
2474
+ Dwarf_Addr /*address*/,
2475
+ Dwarf_Arange * /*returned_arange*/,
2476
+ Dwarf_Error* /*error*/);
2477
+
2478
+ int dwarf_get_cu_die_offset(
2479
+ Dwarf_Arange /*arange*/,
2480
+ Dwarf_Off* /*return_offset*/,
2481
+ Dwarf_Error* /*error*/);
2482
+
2483
+ int dwarf_get_arange_cu_header_offset(
2484
+ Dwarf_Arange /*arange*/,
2485
+ Dwarf_Off* /*return_cu_header_offset*/,
2486
+ Dwarf_Error* /*error*/);
2487
+ #ifdef __sgi /* pragma is sgi MIPS only */
2488
+ #pragma optional dwarf_get_arange_cu_header_offset
2489
+ #endif
2490
+
2491
+ /* DWARF2,3 interface. No longer really adequate (it was never
2492
+ right for segmented address spaces, please switch
2493
+ to using dwarf_get_arange_info_b instead.
2494
+ There is no effective difference between these
2495
+ functions if the address space
2496
+ of the target is not segmented. */
2497
+ int dwarf_get_arange_info(
2498
+ Dwarf_Arange /*arange*/,
2499
+ Dwarf_Addr* /*start*/,
2500
+ Dwarf_Unsigned* /*length*/,
2501
+ Dwarf_Off* /*cu_die_offset*/,
2502
+ Dwarf_Error* /*error*/ );
2503
+
2504
+ /* New for DWARF4, entries may have segment information.
2505
+ *segment is only meaningful if *segment_entry_size is non-zero. */
2506
+ int dwarf_get_arange_info_b(
2507
+ Dwarf_Arange /*arange*/,
2508
+ Dwarf_Unsigned* /*segment*/,
2509
+ Dwarf_Unsigned* /*segment_entry_size*/,
2510
+ Dwarf_Addr * /*start*/,
2511
+ Dwarf_Unsigned* /*length*/,
2512
+ Dwarf_Off * /*cu_die_offset*/,
2513
+ Dwarf_Error * /*error*/ );
2514
+
2515
+
2516
+ /* consumer .debug_macinfo information interface.
2517
+ */
2518
+ struct Dwarf_Macro_Details_s {
2519
+ Dwarf_Off dmd_offset; /* offset, in the section,
2520
+ of this macro info */
2521
+ Dwarf_Small dmd_type; /* the type, DW_MACINFO_define etc*/
2522
+ Dwarf_Signed dmd_lineno; /* the source line number where
2523
+ applicable and vend_def number if
2524
+ vendor_extension op */
2525
+
2526
+ Dwarf_Signed dmd_fileindex;/* the source file index:
2527
+ applies to define undef start_file */
2528
+ char * dmd_macro; /* macro name (with value for defineop)
2529
+ string from vendor ext */
2530
+ };
2531
+
2532
+ /* dwarf_print_lines is for use by dwarfdump: it prints
2533
+ line info to stdout.
2534
+ The _dwarf name is obsolete. Use dwarf_ instead.
2535
+ Added extra argnument 2/2009 for better checking.
2536
+ */
2537
+ int _dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/);
2538
+ int dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/,
2539
+ int * /*error_count_out */);
2540
+
2541
+ /* As of August 2013, dwarf_print_lines() no longer uses printf.
2542
+ Instead it calls back to the application using a function pointer
2543
+ once per line-to-print. The lines passed back already have any needed
2544
+ newlines. The following struct is used to initialize
2545
+ the callback mechanism.
2546
+
2547
+ Failing to call the dwarf_register_printf_callback() function will
2548
+ prevent the lines from being passed back but such omission
2549
+ is not an error.
2550
+ See libdwarf2.1.mm for further documentation.
2551
+
2552
+ The return value is the previous set of callback values.
2553
+ */
2554
+
2555
+ typedef void (* dwarf_printf_callback_function_type)
2556
+ (void * /*user_pointer*/, const char * /*linecontent*/);
2557
+
2558
+ struct Dwarf_Printf_Callback_Info_s {
2559
+ void * dp_user_pointer;
2560
+ dwarf_printf_callback_function_type dp_fptr;
2561
+ char * dp_buffer;
2562
+ unsigned int dp_buffer_len;
2563
+ int dp_buffer_user_provided;
2564
+ void * dp_reserved;
2565
+ };
2566
+
2567
+ /* If called with a NULL newvalues pointer, it simply returns
2568
+ the current set of values for this Dwarf_Debug. */
2569
+ struct Dwarf_Printf_Callback_Info_s
2570
+ dwarf_register_printf_callback(Dwarf_Debug /*dbg*/,
2571
+ struct Dwarf_Printf_Callback_Info_s * /*newvalues*/);
2572
+
2573
+
2574
+ /* dwarf_check_lineheader lets dwarfdump get detailed messages
2575
+ about some compiler errors we detect.
2576
+ We return the count of detected errors through the
2577
+ pointer.
2578
+ */
2579
+ void dwarf_check_lineheader(Dwarf_Die /*cu_die*/,int *errcount_out);
2580
+
2581
+ /* dwarf_ld_sort_lines helps SGI IRIX ld
2582
+ rearrange lines in .debug_line in a .o created with a text
2583
+ section per function.
2584
+ -OPT:procedure_reorder=ON
2585
+ where ld-cord (cord(1)ing by ld,
2586
+ not by cord(1)) may have changed the function order.
2587
+ The _dwarf name is obsolete. Use dwarf_ instead.
2588
+ */
2589
+ int _dwarf_ld_sort_lines(
2590
+ void * /*orig_buffer*/,
2591
+ unsigned long /* buffer_len*/,
2592
+ int /*is_64_bit*/,
2593
+ int * /*any_change*/,
2594
+ int * /*err_code*/);
2595
+ int dwarf_ld_sort_lines(
2596
+ void * /*orig_buffer*/,
2597
+ unsigned long /*buffer_len*/,
2598
+ int /*is_64_bit*/,
2599
+ int * /*any_change*/,
2600
+ int * /*err_code*/);
2601
+
2602
+ /* Used by dwarfdump -v to print fde offsets from debugging
2603
+ info.
2604
+ The _dwarf name is obsolete. Use dwarf_ instead.
2605
+ */
2606
+ int _dwarf_fde_section_offset(Dwarf_Debug dbg,
2607
+ Dwarf_Fde /*in_fde*/,
2608
+ Dwarf_Off * /*fde_off*/,
2609
+ Dwarf_Off * /*cie_off*/,
2610
+ Dwarf_Error * /*err*/);
2611
+ int dwarf_fde_section_offset(Dwarf_Debug dbg,
2612
+ Dwarf_Fde /*in_fde*/,
2613
+ Dwarf_Off * /*fde_off*/,
2614
+ Dwarf_Off * /*cie_off*/,
2615
+ Dwarf_Error * /*err*/);
2616
+
2617
+ /* Used by dwarfdump -v to print cie offsets from debugging
2618
+ info.
2619
+ The _dwarf name is obsolete. Use dwarf_ instead.
2620
+ */
2621
+ int dwarf_cie_section_offset(Dwarf_Debug /*dbg*/,
2622
+ Dwarf_Cie /*in_cie*/,
2623
+ Dwarf_Off * /*cie_off */,
2624
+ Dwarf_Error * /*err*/);
2625
+ int _dwarf_cie_section_offset(Dwarf_Debug /*dbg*/,
2626
+ Dwarf_Cie /*in_cie*/,
2627
+ Dwarf_Off * /*cie_off*/,
2628
+ Dwarf_Error * /*err*/);
2629
+
2630
+ typedef struct Dwarf_Macro_Details_s Dwarf_Macro_Details;
2631
+
2632
+ int dwarf_get_macro(Dwarf_Debug /*dbg*/,
2633
+ char * /*requested_macro_name*/,
2634
+ Dwarf_Addr /*pc_of_request*/,
2635
+ char ** /*returned_macro_value*/,
2636
+ Dwarf_Error * /*error*/);
2637
+
2638
+ int dwarf_get_all_defined_macros(Dwarf_Debug /*dbg*/,
2639
+ Dwarf_Addr /*pc_of_request*/,
2640
+ Dwarf_Signed * /*returned_count*/,
2641
+ char *** /*returned_pointers_to_macros*/,
2642
+ Dwarf_Error * /*error*/);
2643
+
2644
+ char *dwarf_find_macro_value_start(char * /*macro_string*/);
2645
+
2646
+ int dwarf_get_macro_details(Dwarf_Debug /*dbg*/,
2647
+ Dwarf_Off /*macro_offset*/,
2648
+ Dwarf_Unsigned /*maximum_count*/,
2649
+ Dwarf_Signed * /*entry_count*/,
2650
+ Dwarf_Macro_Details ** /*details*/,
2651
+ Dwarf_Error * /*err*/);
2652
+
2653
+
2654
+ /* dwarf_get_offset_size() New October 2015 */
2655
+ int dwarf_get_offset_size(Dwarf_Debug /*dbg*/,
2656
+ Dwarf_Half * /*offset_size*/,
2657
+ Dwarf_Error * /*error*/);
2658
+ int dwarf_get_address_size(Dwarf_Debug /*dbg*/,
2659
+ Dwarf_Half * /*addr_size*/,
2660
+ Dwarf_Error * /*error*/);
2661
+ int dwarf_get_die_address_size(Dwarf_Die /*die*/,
2662
+ Dwarf_Half * /*addr_size*/,
2663
+ Dwarf_Error * /*error*/);
2664
+
2665
+ enum Dwarf_Form_Class dwarf_get_form_class(
2666
+ Dwarf_Half /* dwversion */,
2667
+ Dwarf_Half /* attrnum */,
2668
+ Dwarf_Half /*offset_size */,
2669
+ Dwarf_Half /*form*/);
2670
+
2671
+
2672
+ /* BEGIN gdbindex operations interfaces. */
2673
+ /* .gdb_index section operations.
2674
+ A GDB extension.
2675
+ The section is in some executables and if present
2676
+ is used to quickly map an address or name to
2677
+ a skeleton CU or TU. If present then there are
2678
+ .dwo or .dwp files somewhere to make detailed
2679
+ debugging possible (up to user code to
2680
+ find it/them and deal with them).
2681
+
2682
+ Version 8 built by gdb, so type entries are ok as is.
2683
+ Version 7 built by the 'gold' linker and type index
2684
+ entries for a CU must be derived othewise, the
2685
+ type index is not correct... ? FIXME
2686
+ */
2687
+
2688
+ /* Creates a Dwarf_Gdbindex, returning it and
2689
+ its values through the pointers. */
2690
+ int dwarf_gdbindex_header(Dwarf_Debug /*dbg*/,
2691
+ Dwarf_Gdbindex * /*gdbindexptr*/,
2692
+ Dwarf_Unsigned * /*version*/,
2693
+ Dwarf_Unsigned * /*cu_list_offset*/,
2694
+ Dwarf_Unsigned * /*types_cu_list_offset*/,
2695
+ Dwarf_Unsigned * /*address_area_offset*/,
2696
+ Dwarf_Unsigned * /*symbol_table_offset*/,
2697
+ Dwarf_Unsigned * /*constant_pool_offset*/,
2698
+ Dwarf_Unsigned * /*section_size*/,
2699
+ Dwarf_Unsigned * /*unused_reserved*/,
2700
+ const char ** /*section_name*/,
2701
+ Dwarf_Error * /*error*/);
2702
+
2703
+ int dwarf_gdbindex_culist_array(Dwarf_Gdbindex /*gdbindexptr*/,
2704
+ Dwarf_Unsigned * /*list_length*/,
2705
+ Dwarf_Error * /*error*/);
2706
+
2707
+ /* entryindex: 0 to list_length-1 */
2708
+ int dwarf_gdbindex_culist_entry(Dwarf_Gdbindex /*gdbindexptr*/,
2709
+ Dwarf_Unsigned /*entryindex*/,
2710
+ Dwarf_Unsigned * /*cu_offset*/,
2711
+ Dwarf_Unsigned * /*cu_length*/,
2712
+ Dwarf_Error * /*error*/);
2713
+
2714
+ int dwarf_gdbindex_types_culist_array(Dwarf_Gdbindex /*gdbindexptr*/,
2715
+ Dwarf_Unsigned * /*types_list_length*/,
2716
+ Dwarf_Error * /*error*/);
2717
+
2718
+ /* entryindex: 0 to types_list_length -1 */
2719
+ int dwarf_gdbindex_types_culist_entry(
2720
+ Dwarf_Gdbindex /*gdbindexptr*/,
2721
+ Dwarf_Unsigned /*entryindex*/,
2722
+ Dwarf_Unsigned * /*cu_offset*/,
2723
+ Dwarf_Unsigned * /*tu_offset*/,
2724
+ Dwarf_Unsigned * /*type_signature*/,
2725
+ Dwarf_Error * /*error*/);
2726
+
2727
+ int dwarf_gdbindex_addressarea(Dwarf_Gdbindex /*gdbindexptr*/,
2728
+ Dwarf_Unsigned * /*addressarea_list_length*/,
2729
+ Dwarf_Error * /*error*/);
2730
+
2731
+ /* entryindex: 0 to addressarea_list_length-1 */
2732
+ int dwarf_gdbindex_addressarea_entry(
2733
+ Dwarf_Gdbindex /*gdbindexptr*/,
2734
+ Dwarf_Unsigned /*entryindex*/,
2735
+ Dwarf_Unsigned * /*low_adddress*/,
2736
+ Dwarf_Unsigned * /*high_address*/,
2737
+ Dwarf_Unsigned * /*cu_index*/,
2738
+ Dwarf_Error * /*error*/);
2739
+
2740
+ int dwarf_gdbindex_symboltable_array(Dwarf_Gdbindex /*gdbindexptr*/,
2741
+ Dwarf_Unsigned * /*symtab_list_length*/,
2742
+ Dwarf_Error * /*error*/);
2743
+
2744
+ /* entryindex: 0 to symtab_list_length-1 */
2745
+ int dwarf_gdbindex_symboltable_entry(
2746
+ Dwarf_Gdbindex /*gdbindexptr*/,
2747
+ Dwarf_Unsigned /*entryindex*/,
2748
+ Dwarf_Unsigned * /*string_offset*/,
2749
+ Dwarf_Unsigned * /*cu_vector_offset*/,
2750
+ Dwarf_Error * /*error*/);
2751
+
2752
+ int dwarf_gdbindex_cuvector_length(Dwarf_Gdbindex /*gdbindex*/,
2753
+ Dwarf_Unsigned /*cuvector_offset*/,
2754
+ Dwarf_Unsigned * /*innercount*/,
2755
+ Dwarf_Error * /*error*/);
2756
+
2757
+
2758
+ int dwarf_gdbindex_cuvector_inner_attributes(Dwarf_Gdbindex /*gdbindex*/,
2759
+ Dwarf_Unsigned /*cuvector_offset*/,
2760
+ Dwarf_Unsigned /*innerindex*/,
2761
+ /* The attr_value is a field of bits. For expanded version
2762
+ use dwarf_gdbindex_cuvector_expand_value() */
2763
+ Dwarf_Unsigned * /*attr_value*/,
2764
+ Dwarf_Error * /*error*/);
2765
+
2766
+ int dwarf_gdbindex_cuvector_instance_expand_value(Dwarf_Gdbindex /*gdbindex*/,
2767
+ Dwarf_Unsigned /*value*/,
2768
+ Dwarf_Unsigned * /*cu_index*/,
2769
+ Dwarf_Unsigned * /*reserved1*/,
2770
+ Dwarf_Unsigned * /*symbol_kind*/,
2771
+ Dwarf_Unsigned * /*is_static*/,
2772
+ Dwarf_Error * /*error*/);
2773
+
2774
+
2775
+ /* The strings in the pool follow (in memory) the cu index
2776
+ set and are NUL terminated. */
2777
+
2778
+ int dwarf_gdbindex_string_by_offset(Dwarf_Gdbindex /*gdbindexptr*/,
2779
+ Dwarf_Unsigned /*stringoffset*/,
2780
+ const char ** /*string_ptr*/,
2781
+ Dwarf_Error * /*error*/);
2782
+
2783
+ void dwarf_gdbindex_free(Dwarf_Gdbindex /*gdbindexptr*/);
2784
+
2785
+ /* END gdbindex/debugfission operations. */
2786
+
2787
+ /* START debugfission dwp .debug_cu_index and .debug_tu_index operations. */
2788
+
2789
+ int dwarf_get_xu_index_header(Dwarf_Debug /*dbg*/,
2790
+ const char * section_type, /* "tu" or "cu" */
2791
+ Dwarf_Xu_Index_Header * /*xuhdr*/,
2792
+ Dwarf_Unsigned * /*version_number*/,
2793
+ Dwarf_Unsigned * /*offsets_count L*/,
2794
+ Dwarf_Unsigned * /*units_count N*/,
2795
+ Dwarf_Unsigned * /*hash_slots_count M*/,
2796
+ const char ** /*sect_name*/,
2797
+ Dwarf_Error * /*err*/);
2798
+
2799
+ int dwarf_get_xu_index_section_type(Dwarf_Xu_Index_Header /*xuhdr*/,
2800
+ /* the function returns a pointer to
2801
+ the immutable string "tu" or "cu" via this arg. Do not free. */
2802
+ const char ** /*typename*/,
2803
+ /* the function returns a pointer to
2804
+ the immutable section name. Do not free.
2805
+ .debug_cu_index or .debug_tu_index */
2806
+ const char ** /*sectionname*/,
2807
+ Dwarf_Error * /*err*/);
2808
+
2809
+ /* Index values 0 to M-1 are valid. */
2810
+ int dwarf_get_xu_hash_entry(Dwarf_Xu_Index_Header /*xuhdr*/,
2811
+ Dwarf_Unsigned /*index*/,
2812
+
2813
+ /* Returns the hash value. 64 bits. */
2814
+ Dwarf_Sig8 * /*hash_value*/,
2815
+
2816
+ /* returns the index into rows of offset/size tables. */
2817
+ Dwarf_Unsigned * /*index_to_sections*/,
2818
+ Dwarf_Error * /*err*/);
2819
+
2820
+ /* Columns 0 to L-1, valid. */
2821
+ int dwarf_get_xu_section_names(Dwarf_Xu_Index_Header /*xuhdr*/,
2822
+ /* Row index defined to be row zero. */
2823
+ Dwarf_Unsigned /*column_index*/,
2824
+ Dwarf_Unsigned* /*DW_SECT_ number*/,
2825
+ const char ** /*DW_SECT_ name*/,
2826
+ Dwarf_Error * /*err*/);
2827
+
2828
+ /* Rows 1 to N col 0 to L-1 are valid */
2829
+ int dwarf_get_xu_section_offset(Dwarf_Xu_Index_Header /*xuhdr*/,
2830
+ Dwarf_Unsigned /*row_index*/,
2831
+ Dwarf_Unsigned /*column_index*/,
2832
+ Dwarf_Unsigned* /*sec_offset*/,
2833
+ Dwarf_Unsigned* /*sec_size*/,
2834
+ Dwarf_Error * /*err*/);
2835
+
2836
+ void dwarf_xu_header_free(Dwarf_Xu_Index_Header /*xuhdr*/);
2837
+
2838
+ /* Defined larger than necessary. This struct, being visible,
2839
+ will be difficult to change: binary compatibility. */
2840
+ #define DW_FISSION_SECT_COUNT 12
2841
+
2842
+ /* User must allocate this struct, zero it,
2843
+ and pass a pointer to it
2844
+ into dwarf_get_debugfission_for_cu . */
2845
+ struct Dwarf_Debug_Fission_Per_CU_s {
2846
+ /* Do not free the string. It contains "cu" or "tu". */
2847
+ /* If this is not set (ie, not a CU/TU in DWP Package File)
2848
+ then pcu_type will be NULL. */
2849
+ const char * pcu_type;
2850
+ /* pcu_index is the index (range 1 to N )
2851
+ into the tu/cu table of offsets and the table
2852
+ of sizes. 1 to N as the zero index is reserved
2853
+ for special purposes. Not a value one
2854
+ actually needs. */
2855
+ Dwarf_Unsigned pcu_index;
2856
+ Dwarf_Sig8 pcu_hash; /* 8 byte */
2857
+ /* [0] has offset and size 0.
2858
+ [1]-[8] are DW_SECT_* indexes and the
2859
+ values are the offset and size
2860
+ of the respective section contribution
2861
+ of a single .dwo object. When pcu_size[n] is
2862
+ zero the corresponding section is not present. */
2863
+ Dwarf_Unsigned pcu_offset[DW_FISSION_SECT_COUNT];
2864
+ Dwarf_Unsigned pcu_size[DW_FISSION_SECT_COUNT];
2865
+ Dwarf_Unsigned unused1;
2866
+ Dwarf_Unsigned unused2;
2867
+ };
2868
+ typedef struct Dwarf_Debug_Fission_Per_CU_s Dwarf_Debug_Fission_Per_CU ;
2869
+ /* For any Dwarf_Die in a compilation unit, return
2870
+ the debug fission table data through
2871
+ percu_out. Usually applications
2872
+ will pass in the CU die.
2873
+ Calling code should zero all of the
2874
+ struct Dwarf_Debug_Fission_Per_CU_s before calling this.
2875
+ If there is no debugfission data this returns
2876
+ DW_DLV_NO_ENTRY (only .dwp objects have debugfission data). */
2877
+ int dwarf_get_debugfission_for_die(Dwarf_Die /* die */,
2878
+ Dwarf_Debug_Fission_Per_CU * /* percu_out */,
2879
+ Dwarf_Error * /* err */);
2880
+
2881
+ /* Given a key (hash signature) from a .o, find the per-cu information
2882
+ for the CU with that key. */
2883
+ int dwarf_get_debugfission_for_key(Dwarf_Debug /* dbg */,
2884
+ Dwarf_Sig8 * /* key, hash signature */,
2885
+ const char * key_type /* "cu" or "tu" */,
2886
+ Dwarf_Debug_Fission_Per_CU * /* percu_out */,
2887
+ Dwarf_Error * /* err */);
2888
+
2889
+ /* END debugfission dwp .debug_cu_index and .debug_tu_index operations. */
2890
+
2891
+
2892
+ /* Utility operations */
2893
+ Dwarf_Unsigned dwarf_errno(Dwarf_Error /*error*/);
2894
+
2895
+ char* dwarf_errmsg(Dwarf_Error /*error*/);
2896
+
2897
+ /* stringcheck zero is default and means do all
2898
+ string length validity checks.
2899
+ Call with parameter value 1 to turn off many such checks (and
2900
+ increase performance).
2901
+ Call with zero for safest running.
2902
+ Actual value saved and returned is only 8 bits! Upper bits
2903
+ ignored by libdwarf (and zero on return).
2904
+ Returns previous value. */
2905
+ int dwarf_set_stringcheck(int /*stringcheck*/);
2906
+
2907
+ /* 'apply' defaults to 1 and means do all
2908
+ 'rela' relocations on reading in a dwarf object section with
2909
+ such relocations.
2910
+ Call with parameter value 0 to turn off application of
2911
+ such relocations.
2912
+ Since the static linker leaves 'bogus' data in object sections
2913
+ with a 'rela' relocation section such data cannot be read
2914
+ sensibly without processing the relocations. Such relocations
2915
+ do not exist in executables and shared objects (.so), the
2916
+ relocations only exist in plain .o relocatable object files.
2917
+ Actual value saved and returned is only 8 bits! Upper bits
2918
+ ignored by libdwarf (and zero on return).
2919
+ Returns previous value. */
2920
+ int dwarf_set_reloc_application(int /*apply*/);
2921
+
2922
+ /* Unimplemented */
2923
+ Dwarf_Handler dwarf_seterrhand(Dwarf_Debug /*dbg*/, Dwarf_Handler /*errhand*/);
2924
+
2925
+ /* Unimplemented */
2926
+ Dwarf_Ptr dwarf_seterrarg(Dwarf_Debug /*dbg*/, Dwarf_Ptr /*errarg*/);
2927
+
2928
+ void dwarf_dealloc(Dwarf_Debug /*dbg*/, void* /*space*/,
2929
+ Dwarf_Unsigned /*type*/);
2930
+
2931
+
2932
+ /* DWARF Producer Interface */
2933
+
2934
+ /* New form June, 2011. Adds user_data argument. */
2935
+ typedef int (*Dwarf_Callback_Func)(
2936
+ const char* /*name*/,
2937
+ int /*size*/,
2938
+ Dwarf_Unsigned /*type*/,
2939
+ Dwarf_Unsigned /*flags*/,
2940
+ Dwarf_Unsigned /*link*/,
2941
+ Dwarf_Unsigned /*info*/,
2942
+ Dwarf_Unsigned* /*sect_name_index*/,
2943
+ void * /*user_data*/,
2944
+ int* /*error*/);
2945
+
2946
+ /* Returns DW_DLV_OK or DW_DLV_ERROR and
2947
+ if DW_DLV_OK returns the Dwarf_P_Debug
2948
+ pointer through the dbg_returned argument. */
2949
+ int dwarf_producer_init(
2950
+ Dwarf_Unsigned /*flags*/,
2951
+ Dwarf_Callback_Func /*func*/,
2952
+ Dwarf_Handler /*errhand*/,
2953
+ Dwarf_Ptr /*errarg*/,
2954
+ void * /*user_data*/,
2955
+ const char *isa_name, /* See isa/abi names in pro_init.c */
2956
+ const char *dwarf_version, /* V2 V3 V4 or V5. */
2957
+ const char *extra, /* Extra input strings, comma separated. */
2958
+ Dwarf_P_Debug *, /* dbg_returned */
2959
+ Dwarf_Error * /*error*/);
2960
+
2961
+ Dwarf_Signed dwarf_transform_to_disk_form(Dwarf_P_Debug /*dbg*/,
2962
+ Dwarf_Error* /*error*/);
2963
+
2964
+ Dwarf_Ptr dwarf_get_section_bytes(Dwarf_P_Debug /*dbg*/,
2965
+ Dwarf_Signed /*dwarf_section*/,
2966
+ Dwarf_Signed* /*elf_section_index*/,
2967
+ Dwarf_Unsigned* /*length*/,
2968
+ Dwarf_Error* /*error*/);
2969
+
2970
+ int dwarf_get_relocation_info_count(
2971
+ Dwarf_P_Debug /*dbg*/,
2972
+ Dwarf_Unsigned * /*count_of_relocation_sections*/,
2973
+ int * /*drd_buffer_version*/,
2974
+ Dwarf_Error* /*error*/);
2975
+
2976
+ int dwarf_get_relocation_info(
2977
+ Dwarf_P_Debug /*dbg*/,
2978
+ Dwarf_Signed * /*elf_section_index*/,
2979
+ Dwarf_Signed * /*elf_section_index_link*/,
2980
+ Dwarf_Unsigned * /*relocation_buffer_count*/,
2981
+ Dwarf_Relocation_Data * /*reldata_buffer*/,
2982
+ Dwarf_Error* /*error*/);
2983
+
2984
+ /* v1: no drd_length field, enum explicit */
2985
+ /* v2: has the drd_length field, enum value in uchar member */
2986
+ #define DWARF_DRD_BUFFER_VERSION 2
2987
+
2988
+ /* Markers are not written to DWARF2/3/4, they are user
2989
+ defined and may be used for any purpose.
2990
+ */
2991
+ Dwarf_Signed dwarf_get_die_markers(
2992
+ Dwarf_P_Debug /*dbg*/,
2993
+ Dwarf_P_Marker * /*marker_list*/,
2994
+ Dwarf_Unsigned * /*marker_count*/,
2995
+ Dwarf_Error * /*error*/);
2996
+
2997
+ int dwarf_get_string_attributes_count(Dwarf_P_Debug,
2998
+ Dwarf_Unsigned *,
2999
+ int *,
3000
+ Dwarf_Error *);
3001
+
3002
+ int dwarf_get_string_attributes_info(Dwarf_P_Debug,
3003
+ Dwarf_Signed *,
3004
+ Dwarf_Unsigned *,
3005
+ Dwarf_P_String_Attr *,
3006
+ Dwarf_Error *);
3007
+
3008
+ void dwarf_reset_section_bytes(Dwarf_P_Debug /*dbg*/);
3009
+
3010
+ Dwarf_Unsigned dwarf_producer_finish(Dwarf_P_Debug /*dbg*/,
3011
+ Dwarf_Error* /*error*/);
3012
+
3013
+ /* Producer attribute addition functions. */
3014
+ Dwarf_P_Attribute dwarf_add_AT_targ_address(Dwarf_P_Debug /*dbg*/,
3015
+ Dwarf_P_Die /*ownerdie*/,
3016
+ Dwarf_Half /*attr*/,
3017
+ Dwarf_Unsigned /*pc_value*/,
3018
+ Dwarf_Signed /*sym_index*/,
3019
+ Dwarf_Error* /*error*/);
3020
+
3021
+ Dwarf_P_Attribute dwarf_add_AT_block(Dwarf_P_Debug /*dbg*/,
3022
+ Dwarf_P_Die /*ownerdie*/,
3023
+ Dwarf_Half /*attr*/,
3024
+ Dwarf_Small* /*block_data*/,
3025
+ Dwarf_Unsigned /*block_len*/,
3026
+ Dwarf_Error* /*error*/);
3027
+
3028
+ Dwarf_P_Attribute dwarf_add_AT_targ_address_b(Dwarf_P_Debug /*dbg*/,
3029
+ Dwarf_P_Die /*ownerdie*/,
3030
+ Dwarf_Half /*attr*/,
3031
+ Dwarf_Unsigned /*pc_value*/,
3032
+ Dwarf_Unsigned /*sym_index*/,
3033
+ Dwarf_Error* /*error*/);
3034
+
3035
+ Dwarf_P_Attribute dwarf_add_AT_ref_address(Dwarf_P_Debug /*dbg*/,
3036
+ Dwarf_P_Die /*ownerdie*/,
3037
+ Dwarf_Half /*attr*/,
3038
+ Dwarf_Unsigned /*pc_value*/,
3039
+ Dwarf_Unsigned /*sym_index*/,
3040
+ Dwarf_Error* /*error*/);
3041
+
3042
+ Dwarf_P_Attribute dwarf_add_AT_unsigned_const(Dwarf_P_Debug /*dbg*/,
3043
+ Dwarf_P_Die /*ownerdie*/,
3044
+ Dwarf_Half /*attr*/,
3045
+ Dwarf_Unsigned /*value*/,
3046
+ Dwarf_Error* /*error*/);
3047
+
3048
+ Dwarf_P_Attribute dwarf_add_AT_signed_const(Dwarf_P_Debug /*dbg*/,
3049
+ Dwarf_P_Die /*ownerdie*/,
3050
+ Dwarf_Half /*attr*/,
3051
+ Dwarf_Signed /*value*/,
3052
+ Dwarf_Error* /*error*/);
3053
+
3054
+ Dwarf_P_Attribute dwarf_add_AT_reference(Dwarf_P_Debug /*dbg*/,
3055
+ Dwarf_P_Die /*ownerdie*/,
3056
+ Dwarf_Half /*attr*/,
3057
+ Dwarf_P_Die /*otherdie*/,
3058
+ Dwarf_Error* /*error*/);
3059
+
3060
+ /* dwarf_add_AT_reference_b allows otherdie to be NULL with
3061
+ the assumption the caller will then later call
3062
+ dwarf_fixup_AT_reference_die() with a non-null target die.
3063
+ New 22 October, 2013
3064
+ */
3065
+ Dwarf_P_Attribute dwarf_add_AT_reference_b(Dwarf_P_Debug /*dbg*/,
3066
+ Dwarf_P_Die /*ownerdie*/,
3067
+ Dwarf_Half /*attr*/,
3068
+ Dwarf_P_Die /*otherdie*/,
3069
+ Dwarf_Error* /*error*/);
3070
+
3071
+ /* The following is for out-of-order cu-local
3072
+ references. Allowing nominating the target Dwarf_P_Die
3073
+ after calling dwarf_add_AT_reference with a NULL otherdie
3074
+ after a single pass thru the DIE generation. Needed
3075
+ for forward-references.
3076
+ New 22 October, 2013.
3077
+ */
3078
+ int
3079
+ dwarf_fixup_AT_reference_die(Dwarf_P_Debug /*dbg */,
3080
+ Dwarf_Half /* attrnum */,
3081
+ Dwarf_P_Die /* sourcedie*/,
3082
+ Dwarf_P_Die /* targetdie*/,
3083
+ Dwarf_Error * /*error*/);
3084
+
3085
+
3086
+ Dwarf_P_Attribute dwarf_add_AT_dataref(
3087
+ Dwarf_P_Debug /* dbg*/,
3088
+ Dwarf_P_Die /*ownerdie*/,
3089
+ Dwarf_Half /*attr*/,
3090
+ Dwarf_Unsigned /*pcvalue*/,
3091
+ Dwarf_Unsigned /*sym_index*/,
3092
+ Dwarf_Error* /*error*/);
3093
+
3094
+ Dwarf_P_Attribute dwarf_add_AT_const_value_string(Dwarf_P_Die /*ownerdie*/,
3095
+ char* /*string_value*/,
3096
+ Dwarf_Error* /*error*/);
3097
+
3098
+ Dwarf_P_Attribute dwarf_add_AT_location_expr(Dwarf_P_Debug /*dbg*/,
3099
+ Dwarf_P_Die /*ownerdie*/,
3100
+ Dwarf_Half /*attr*/,
3101
+ Dwarf_P_Expr /*loc_expr*/,
3102
+ Dwarf_Error* /*error*/);
3103
+
3104
+ Dwarf_P_Attribute dwarf_add_AT_string(Dwarf_P_Debug /*dbg*/,
3105
+ Dwarf_P_Die /*ownerdie*/,
3106
+ Dwarf_Half /*attr*/,
3107
+ char* /*string*/,
3108
+ Dwarf_Error* /*error*/);
3109
+
3110
+ Dwarf_P_Attribute dwarf_add_AT_flag(Dwarf_P_Debug /*dbg*/,
3111
+ Dwarf_P_Die /*ownerdie*/,
3112
+ Dwarf_Half /*attr*/,
3113
+ Dwarf_Small /*flag*/,
3114
+ Dwarf_Error* /*error*/);
3115
+
3116
+ Dwarf_P_Attribute dwarf_add_AT_producer(Dwarf_P_Die /*ownerdie*/,
3117
+ char* /*producer_string*/,
3118
+ Dwarf_Error* /*error*/);
3119
+
3120
+ /* August 2013 sleb creator. For any attribute. */
3121
+ Dwarf_P_Attribute dwarf_add_AT_any_value_sleb(Dwarf_P_Die /*ownerdie*/,
3122
+ Dwarf_Half /*attrnum*/,
3123
+ Dwarf_Signed /*signed_value*/,
3124
+ Dwarf_Error * /*error*/);
3125
+
3126
+ /* Original sleb creator. Only for DW_AT_const_value. */
3127
+ Dwarf_P_Attribute dwarf_add_AT_const_value_signedint(Dwarf_P_Die /*ownerdie*/,
3128
+ Dwarf_Signed /*signed_value*/,
3129
+ Dwarf_Error* /*error*/);
3130
+
3131
+ /* August 2013 uleb creator. For any attribute. */
3132
+ Dwarf_P_Attribute dwarf_add_AT_any_value_uleb(Dwarf_P_Die /*ownerdie*/,
3133
+ Dwarf_Half /*attrnum*/,
3134
+ Dwarf_Unsigned /*signed_value*/,
3135
+ Dwarf_Error * /*error*/);
3136
+
3137
+ /* Original uleb creator. Only for DW_AT_const_value. */
3138
+ Dwarf_P_Attribute dwarf_add_AT_const_value_unsignedint(
3139
+ Dwarf_P_Die /*ownerdie*/,
3140
+ Dwarf_Unsigned /*unsigned_value*/,
3141
+ Dwarf_Error* /*error*/);
3142
+
3143
+ Dwarf_P_Attribute dwarf_add_AT_comp_dir(Dwarf_P_Die /*ownerdie*/,
3144
+ char* /*current_working_directory*/,
3145
+ Dwarf_Error* /*error*/);
3146
+
3147
+ Dwarf_P_Attribute dwarf_add_AT_name(Dwarf_P_Die /*die*/,
3148
+ char* /*name*/,
3149
+ Dwarf_Error* /*error*/);
3150
+
3151
+ Dwarf_P_Attribute
3152
+ dwarf_add_AT_with_ref_sig8(
3153
+ Dwarf_P_Die /*ownerdie */,
3154
+ Dwarf_Half /*attrnum */,
3155
+ const Dwarf_Sig8 * /*sig8_in*/,
3156
+ Dwarf_Error * /*error*/);
3157
+
3158
+
3159
+ /* Producer line creation functions (.debug_line) */
3160
+ Dwarf_Unsigned dwarf_add_directory_decl(Dwarf_P_Debug /*dbg*/,
3161
+ char* /*name*/,
3162
+ Dwarf_Error* /*error*/);
3163
+
3164
+ Dwarf_Unsigned dwarf_add_file_decl(Dwarf_P_Debug /*dbg*/,
3165
+ char* /*name*/,
3166
+ Dwarf_Unsigned /*dir_index*/,
3167
+ Dwarf_Unsigned /*time_last_modified*/,
3168
+ Dwarf_Unsigned /*length*/,
3169
+ Dwarf_Error* /*error*/);
3170
+
3171
+ Dwarf_Unsigned dwarf_add_line_entry_b(Dwarf_P_Debug /*dbg*/,
3172
+ Dwarf_Unsigned /*file_index*/,
3173
+ Dwarf_Addr /*code_address*/,
3174
+ Dwarf_Unsigned /*lineno*/,
3175
+ Dwarf_Signed /*column_number*/,
3176
+ Dwarf_Bool /*is_source_stmt_begin*/,
3177
+ Dwarf_Bool /*is_basic_block_begin*/,
3178
+ Dwarf_Bool /*is_epilogue_begin*/,
3179
+ Dwarf_Bool /*is_prologue_end*/,
3180
+ Dwarf_Unsigned /*isa*/,
3181
+ Dwarf_Unsigned /*discriminator*/,
3182
+ Dwarf_Error* /*error*/);
3183
+ Dwarf_Unsigned dwarf_add_line_entry(Dwarf_P_Debug /*dbg*/,
3184
+ Dwarf_Unsigned /*file_index*/,
3185
+ Dwarf_Addr /*code_address*/,
3186
+ Dwarf_Unsigned /*lineno*/,
3187
+ Dwarf_Signed /*column_number*/,
3188
+ Dwarf_Bool /*is_source_stmt_begin*/,
3189
+ Dwarf_Bool /*is_basic_block_begin*/,
3190
+ Dwarf_Error* /*error*/);
3191
+
3192
+ Dwarf_Unsigned dwarf_lne_set_address(Dwarf_P_Debug /*dbg*/,
3193
+ Dwarf_Unsigned /*offset*/,
3194
+ Dwarf_Unsigned /*symbol_index*/,
3195
+ Dwarf_Error* /*error*/);
3196
+
3197
+ Dwarf_Unsigned dwarf_lne_end_sequence(Dwarf_P_Debug /*dbg*/,
3198
+ Dwarf_Addr /*end_address*/,
3199
+ Dwarf_Error* /*error*/);
3200
+
3201
+ /* Producer .debug_frame functions */
3202
+ Dwarf_Unsigned dwarf_add_frame_cie(Dwarf_P_Debug /*dbg*/,
3203
+ char* /*augmenter*/,
3204
+ Dwarf_Small /*code_alignment_factor*/,
3205
+ Dwarf_Small /*data_alignment_factor*/,
3206
+ Dwarf_Small /*return_address_reg*/,
3207
+ Dwarf_Ptr /*initialization_bytes*/,
3208
+ Dwarf_Unsigned /*init_byte_len*/,
3209
+ Dwarf_Error* /*error*/);
3210
+
3211
+ Dwarf_Unsigned dwarf_add_frame_fde(
3212
+ Dwarf_P_Debug /*dbg*/,
3213
+ Dwarf_P_Fde /*fde*/,
3214
+ Dwarf_P_Die /*corresponding subprogram die*/,
3215
+ Dwarf_Unsigned /*cie_to_use*/,
3216
+ Dwarf_Unsigned /*virt_addr_of_described_code*/,
3217
+ Dwarf_Unsigned /*length_of_code*/,
3218
+ Dwarf_Unsigned /*symbol_index*/,
3219
+ Dwarf_Error* /*error*/);
3220
+
3221
+ Dwarf_Unsigned dwarf_add_frame_fde_b(
3222
+ Dwarf_P_Debug /*dbg*/,
3223
+ Dwarf_P_Fde /*fde*/,
3224
+ Dwarf_P_Die /*die*/,
3225
+ Dwarf_Unsigned /*cie*/,
3226
+ Dwarf_Addr /*virt_addr*/,
3227
+ Dwarf_Unsigned /*code_len*/,
3228
+ Dwarf_Unsigned /*sym_idx*/,
3229
+ Dwarf_Unsigned /*sym_idx_of_end*/,
3230
+ Dwarf_Addr /*offset_from_end_sym*/,
3231
+ Dwarf_Error* /*error*/);
3232
+
3233
+ Dwarf_Unsigned dwarf_add_frame_info_b(
3234
+ Dwarf_P_Debug dbg /*dbg*/,
3235
+ Dwarf_P_Fde /*fde*/,
3236
+ Dwarf_P_Die /*die*/,
3237
+ Dwarf_Unsigned /*cie*/,
3238
+ Dwarf_Addr /*virt_addr*/,
3239
+ Dwarf_Unsigned /*code_len*/,
3240
+ Dwarf_Unsigned /*symidx*/,
3241
+ Dwarf_Unsigned /*end_symbol */,
3242
+ Dwarf_Addr /*offset_from_end_symbol */,
3243
+ Dwarf_Signed /*offset_into_exception_tables*/,
3244
+ Dwarf_Unsigned /*exception_table_symbol*/,
3245
+ Dwarf_Error* /*error*/);
3246
+
3247
+ Dwarf_Unsigned dwarf_add_frame_info(
3248
+ Dwarf_P_Debug dbg /*dbg*/,
3249
+ Dwarf_P_Fde /*fde*/,
3250
+ Dwarf_P_Die /*die*/,
3251
+ Dwarf_Unsigned /*cie*/,
3252
+ Dwarf_Addr /*virt_addr*/,
3253
+ Dwarf_Unsigned /*code_len*/,
3254
+ Dwarf_Unsigned /*symidx*/,
3255
+ Dwarf_Signed /*offset_into_exception_tables*/,
3256
+ Dwarf_Unsigned /*exception_table_symbol*/,
3257
+ Dwarf_Error* /*error*/);
3258
+
3259
+ Dwarf_P_Fde dwarf_add_fde_inst(
3260
+ Dwarf_P_Fde /*fde*/,
3261
+ Dwarf_Small /*op*/,
3262
+ Dwarf_Unsigned /*val1*/,
3263
+ Dwarf_Unsigned /*val2*/,
3264
+ Dwarf_Error* /*error*/);
3265
+
3266
+ /* New September 17, 2009 */
3267
+ int dwarf_insert_fde_inst_bytes(
3268
+ Dwarf_P_Debug /*dbg*/,
3269
+ Dwarf_P_Fde /*fde*/,
3270
+ Dwarf_Unsigned /*len*/,
3271
+ Dwarf_Ptr /*ibytes*/,
3272
+ Dwarf_Error* /*error*/);
3273
+
3274
+
3275
+ Dwarf_P_Fde dwarf_new_fde(Dwarf_P_Debug /*dbg*/, Dwarf_Error* /*error*/);
3276
+
3277
+ Dwarf_P_Fde dwarf_fde_cfa_offset(
3278
+ Dwarf_P_Fde /*fde*/,
3279
+ Dwarf_Unsigned /*register_number*/,
3280
+ Dwarf_Signed /*offset*/,
3281
+ Dwarf_Error* /*error*/);
3282
+
3283
+ /* die creation & addition routines */
3284
+ Dwarf_P_Die dwarf_new_die(
3285
+ Dwarf_P_Debug /*dbg*/,
3286
+ Dwarf_Tag /*tag*/,
3287
+ Dwarf_P_Die /*parent*/,
3288
+ Dwarf_P_Die /*child*/,
3289
+ Dwarf_P_Die /*left */,
3290
+ Dwarf_P_Die /*right*/,
3291
+ Dwarf_Error* /*error*/);
3292
+
3293
+ Dwarf_Unsigned dwarf_add_die_to_debug(
3294
+ Dwarf_P_Debug /*dbg*/,
3295
+ Dwarf_P_Die /*die*/,
3296
+ Dwarf_Error* /*error*/);
3297
+
3298
+ /* Markers are not written to DWARF2/3/4, they are user
3299
+ defined and may be used for any purpose.
3300
+ */
3301
+ Dwarf_Unsigned dwarf_add_die_marker(
3302
+ Dwarf_P_Debug /*dbg*/,
3303
+ Dwarf_P_Die /*die*/,
3304
+ Dwarf_Unsigned /*marker*/,
3305
+ Dwarf_Error * /*error*/);
3306
+
3307
+ Dwarf_Unsigned dwarf_get_die_marker(
3308
+ Dwarf_P_Debug /*dbg*/,
3309
+ Dwarf_P_Die /*die*/,
3310
+ Dwarf_Unsigned * /*marker*/,
3311
+ Dwarf_Error * /*error*/);
3312
+
3313
+ Dwarf_P_Die dwarf_die_link(
3314
+ Dwarf_P_Die /*die*/,
3315
+ Dwarf_P_Die /*parent*/,
3316
+ Dwarf_P_Die /*child*/,
3317
+ Dwarf_P_Die /*left*/,
3318
+ Dwarf_P_Die /*right*/,
3319
+ Dwarf_Error* /*error*/);
3320
+
3321
+ void dwarf_dealloc_compressed_block(
3322
+ Dwarf_P_Debug,
3323
+ void *
3324
+ );
3325
+
3326
+ /* Call this passing in return value from dwarf_uncompress_integer_block()
3327
+ to free the space the decompression allocated. */
3328
+ void dwarf_dealloc_uncompressed_block(
3329
+ Dwarf_Debug,
3330
+ void *
3331
+ );
3332
+
3333
+ void * dwarf_compress_integer_block(
3334
+ Dwarf_P_Debug, /* dbg */
3335
+ Dwarf_Bool, /* signed==true (or unsigned) */
3336
+ Dwarf_Small, /* size of integer units: 8, 16, 32, 64 */
3337
+ void*, /* data */
3338
+ Dwarf_Unsigned, /* number of elements */
3339
+ Dwarf_Unsigned*, /* number of bytes in output block */
3340
+ Dwarf_Error* /* error */
3341
+ );
3342
+
3343
+ /* Decode an array of signed leb integers (so of course the
3344
+ array is not composed of fixed length values, but is instead
3345
+ a sequence of sleb values).
3346
+ Returns a DW_DLV_BADADDR on error.
3347
+ Otherwise returns a pointer to an array of 32bit integers.
3348
+ The signed argument must be non-zero (the decode
3349
+ assumes sleb integers in the input data) at this time.
3350
+ Size of integer units must be 32 (32 bits each) at this time.
3351
+ Number of bytes in block is a byte count (not array count).
3352
+ Returns number of units in output block (ie, number of elements
3353
+ of the array that the return value points to) thru the argument. */
3354
+ void * dwarf_uncompress_integer_block(
3355
+ Dwarf_Debug, /* dbg */
3356
+ Dwarf_Bool, /* signed==true (or unsigned) */
3357
+ Dwarf_Small, /* size of integer units: 8, 16, 32, 64 */
3358
+ void*, /* input data */
3359
+ Dwarf_Unsigned, /* number of bytes in input */
3360
+ Dwarf_Unsigned*, /* number of units in output block */
3361
+ Dwarf_Error* /* error */
3362
+ );
3363
+
3364
+ /* Operations to create location expressions. */
3365
+ Dwarf_P_Expr dwarf_new_expr(Dwarf_P_Debug /*dbg*/, Dwarf_Error* /*error*/);
3366
+
3367
+ void dwarf_expr_reset(
3368
+ Dwarf_P_Expr /*expr*/,
3369
+ Dwarf_Error* /*error*/);
3370
+
3371
+ Dwarf_Unsigned dwarf_add_expr_gen(
3372
+ Dwarf_P_Expr /*expr*/,
3373
+ Dwarf_Small /*opcode*/,
3374
+ Dwarf_Unsigned /*val1*/,
3375
+ Dwarf_Unsigned /*val2*/,
3376
+ Dwarf_Error* /*error*/);
3377
+
3378
+ Dwarf_Unsigned dwarf_add_expr_addr(
3379
+ Dwarf_P_Expr /*expr*/,
3380
+ Dwarf_Unsigned /*addr*/,
3381
+ Dwarf_Signed /*sym_index*/,
3382
+ Dwarf_Error* /*error*/);
3383
+
3384
+ Dwarf_Unsigned dwarf_add_expr_addr_b(
3385
+ Dwarf_P_Expr /*expr*/,
3386
+ Dwarf_Unsigned /*addr*/,
3387
+ Dwarf_Unsigned /*sym_index*/,
3388
+ Dwarf_Error* /*error*/);
3389
+
3390
+ Dwarf_Unsigned dwarf_expr_current_offset(
3391
+ Dwarf_P_Expr /*expr*/,
3392
+ Dwarf_Error* /*error*/);
3393
+
3394
+ Dwarf_Addr dwarf_expr_into_block(
3395
+ Dwarf_P_Expr /*expr*/,
3396
+ Dwarf_Unsigned* /*length*/,
3397
+ Dwarf_Error* /*error*/);
3398
+
3399
+ Dwarf_Unsigned dwarf_add_arange(Dwarf_P_Debug /*dbg*/,
3400
+ Dwarf_Addr /*begin_address*/,
3401
+ Dwarf_Unsigned /*length*/,
3402
+ Dwarf_Signed /*symbol_index*/,
3403
+ Dwarf_Error* /*error*/);
3404
+
3405
+ Dwarf_Unsigned dwarf_add_arange_b(
3406
+ Dwarf_P_Debug /*dbg*/,
3407
+ Dwarf_Addr /*begin_address*/,
3408
+ Dwarf_Unsigned /*length*/,
3409
+ Dwarf_Unsigned /*symbol_index*/,
3410
+ Dwarf_Unsigned /*end_symbol_index*/,
3411
+ Dwarf_Addr /*offset_from_end_symbol*/,
3412
+ Dwarf_Error * /*error*/);
3413
+
3414
+ Dwarf_Unsigned dwarf_add_pubname(
3415
+ Dwarf_P_Debug /*dbg*/,
3416
+ Dwarf_P_Die /*die*/,
3417
+ char* /*pubname_name*/,
3418
+ Dwarf_Error* /*error*/);
3419
+
3420
+ /* Added 17 October 2013. Introduced in DWARF3. */
3421
+ Dwarf_Unsigned dwarf_add_pubtype(
3422
+ Dwarf_P_Debug /*dbg*/,
3423
+ Dwarf_P_Die /*die*/,
3424
+ char* /*pubtype_name*/,
3425
+ Dwarf_Error* /*error*/);
3426
+
3427
+
3428
+ Dwarf_Unsigned dwarf_add_funcname(
3429
+ Dwarf_P_Debug /*dbg*/,
3430
+ Dwarf_P_Die /*die*/,
3431
+ char* /*func_name*/,
3432
+ Dwarf_Error* /*error*/);
3433
+
3434
+ Dwarf_Unsigned dwarf_add_typename(
3435
+ Dwarf_P_Debug /*dbg*/,
3436
+ Dwarf_P_Die /*die*/,
3437
+ char* /*type_name*/,
3438
+ Dwarf_Error* /*error*/);
3439
+
3440
+ Dwarf_Unsigned dwarf_add_varname(
3441
+ Dwarf_P_Debug /*dbg*/,
3442
+ Dwarf_P_Die /*die*/,
3443
+ char* /*var_name*/,
3444
+ Dwarf_Error* /*error*/);
3445
+
3446
+ Dwarf_Unsigned dwarf_add_weakname(
3447
+ Dwarf_P_Debug /*dbg*/,
3448
+ Dwarf_P_Die /*die*/,
3449
+ char* /*weak_name*/,
3450
+ Dwarf_Error* /*error*/);
3451
+
3452
+ /* .debug_macinfo producer functions
3453
+ Functions must be called in right order: the section is output
3454
+ In the order these are presented.
3455
+ */
3456
+ int dwarf_def_macro(Dwarf_P_Debug /*dbg*/,
3457
+ Dwarf_Unsigned /*line*/,
3458
+ char * /*macname, with (arglist), no space before (*/,
3459
+ char * /*macvalue*/,
3460
+ Dwarf_Error* /*error*/);
3461
+
3462
+ int dwarf_undef_macro(Dwarf_P_Debug /*dbg*/,
3463
+ Dwarf_Unsigned /*line*/,
3464
+ char * /*macname, no arglist, of course*/,
3465
+ Dwarf_Error* /*error*/);
3466
+
3467
+ int dwarf_start_macro_file(Dwarf_P_Debug /*dbg*/,
3468
+ Dwarf_Unsigned /*fileindex*/,
3469
+ Dwarf_Unsigned /*linenumber*/,
3470
+ Dwarf_Error* /*error*/);
3471
+
3472
+ int dwarf_end_macro_file(Dwarf_P_Debug /*dbg*/,
3473
+ Dwarf_Error* /*error*/);
3474
+
3475
+ int dwarf_vendor_ext(Dwarf_P_Debug /*dbg*/,
3476
+ Dwarf_Unsigned /*constant*/,
3477
+ char * /*string*/,
3478
+ Dwarf_Error* /*error*/);
3479
+
3480
+ /* end macinfo producer functions */
3481
+
3482
+ int dwarf_attr_offset(Dwarf_Die /*die*/,
3483
+ Dwarf_Attribute /*attr of above die*/,
3484
+ Dwarf_Off * /*returns offset thru this ptr */,
3485
+ Dwarf_Error * /*error*/);
3486
+
3487
+ /* This is a hack so clients can verify offsets.
3488
+ Added April 2005 so that debugger can detect broken offsets
3489
+ (which happened in an IRIX executable larger than 2GB
3490
+ with MIPSpro 7.3.1.3 toolchain.).
3491
+ */
3492
+ int
3493
+ dwarf_get_section_max_offsets(Dwarf_Debug /*dbg*/,
3494
+ Dwarf_Unsigned * /*debug_info_size*/,
3495
+ Dwarf_Unsigned * /*debug_abbrev_size*/,
3496
+ Dwarf_Unsigned * /*debug_line_size*/,
3497
+ Dwarf_Unsigned * /*debug_loc_size*/,
3498
+ Dwarf_Unsigned * /*debug_aranges_size*/,
3499
+ Dwarf_Unsigned * /*debug_macinfo_size*/,
3500
+ Dwarf_Unsigned * /*debug_pubnames_size*/,
3501
+ Dwarf_Unsigned * /*debug_str_size*/,
3502
+ Dwarf_Unsigned * /*debug_frame_size*/,
3503
+ Dwarf_Unsigned * /*debug_ranges_size*/,
3504
+ Dwarf_Unsigned * /*debug_pubtypes_size*/);
3505
+
3506
+ /* New October 2011., adds .debug_types section to the sizes
3507
+ returned. */
3508
+ int
3509
+ dwarf_get_section_max_offsets_b(Dwarf_Debug /*dbg*/,
3510
+
3511
+ Dwarf_Unsigned * /*debug_info_size*/,
3512
+ Dwarf_Unsigned * /*debug_abbrev_size*/,
3513
+ Dwarf_Unsigned * /*debug_line_size*/,
3514
+ Dwarf_Unsigned * /*debug_loc_size*/,
3515
+ Dwarf_Unsigned * /*debug_aranges_size*/,
3516
+ Dwarf_Unsigned * /*debug_macinfo_size*/,
3517
+ Dwarf_Unsigned * /*debug_pubnames_size*/,
3518
+ Dwarf_Unsigned * /*debug_str_size*/,
3519
+ Dwarf_Unsigned * /*debug_frame_size*/,
3520
+ Dwarf_Unsigned * /*debug_ranges_size*/,
3521
+ Dwarf_Unsigned * /*debug_pubtypes_size*/,
3522
+ Dwarf_Unsigned * /*debug_types_size*/);
3523
+
3524
+ /* The 'set' calls here return the original (before any change
3525
+ by these set routines) of the respective fields. */
3526
+ /* Multiple releases spelled 'initial' as 'inital' .
3527
+ The 'inital' spelling should not be used. */
3528
+ Dwarf_Half dwarf_set_frame_rule_inital_value(Dwarf_Debug /*dbg*/,
3529
+ Dwarf_Half /*value*/);
3530
+ /* Additional interface with correct 'initial' spelling. */
3531
+ /* It is likely you will want to call the following 6 functions
3532
+ before accessing any frame information. All are useful
3533
+ to tailor handling of pseudo-registers needed to turn
3534
+ frame operation references into simpler forms and to
3535
+ reflect ABI specific data. Of course altering libdwarf.h
3536
+ and dwarf.h allow the same capabilities, but such header changes
3537
+ do not let one change these values at runtime. */
3538
+ Dwarf_Half dwarf_set_frame_rule_initial_value(Dwarf_Debug /*dbg*/,
3539
+ Dwarf_Half /*value*/);
3540
+ Dwarf_Half dwarf_set_frame_rule_table_size(Dwarf_Debug /*dbg*/,
3541
+ Dwarf_Half /*value*/);
3542
+ Dwarf_Half dwarf_set_frame_cfa_value(Dwarf_Debug /*dbg*/,
3543
+ Dwarf_Half /*value*/);
3544
+ Dwarf_Half dwarf_set_frame_same_value(Dwarf_Debug /*dbg*/,
3545
+ Dwarf_Half /*value*/);
3546
+ Dwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug /*dbg*/,
3547
+ Dwarf_Half /*value*/);
3548
+ /* dwarf_set_default_address_size only sets 'value' if value is
3549
+ greater than zero. */
3550
+ Dwarf_Small dwarf_set_default_address_size(Dwarf_Debug /*dbg*/,
3551
+ Dwarf_Small /* value */);
3552
+
3553
+ /* As of April 27, 2009, this version with no diepointer is
3554
+ obsolete though supported. Use dwarf_get_ranges_a() instead. */
3555
+ int dwarf_get_ranges(Dwarf_Debug /*dbg*/,
3556
+ Dwarf_Off /*rangesoffset*/,
3557
+ Dwarf_Ranges ** /*rangesbuf*/,
3558
+ Dwarf_Signed * /*listlen*/,
3559
+ Dwarf_Unsigned * /*bytecount*/,
3560
+ Dwarf_Error * /*error*/);
3561
+
3562
+ /* This adds the address_size argument. New April 27, 2009 */
3563
+ int dwarf_get_ranges_a(Dwarf_Debug /*dbg*/,
3564
+ Dwarf_Off /*rangesoffset*/,
3565
+ Dwarf_Die /* diepointer */,
3566
+ Dwarf_Ranges ** /*rangesbuf*/,
3567
+ Dwarf_Signed * /*listlen*/,
3568
+ Dwarf_Unsigned * /*bytecount*/,
3569
+ Dwarf_Error * /*error*/);
3570
+
3571
+ void dwarf_ranges_dealloc(Dwarf_Debug /*dbg*/,
3572
+ Dwarf_Ranges * /*rangesbuf*/,
3573
+ Dwarf_Signed /*rangecount*/);
3574
+
3575
+ /* The harmless error list is a circular buffer of
3576
+ errors we note but which do not stop us from processing
3577
+ the object. Created so dwarfdump or other tools
3578
+ can report such inconsequential errors without causing
3579
+ anything to stop early. */
3580
+ #define DW_HARMLESS_ERROR_CIRCULAR_LIST_DEFAULT_SIZE 4
3581
+ #define DW_HARMLESS_ERROR_MSG_STRING_SIZE 200
3582
+ /* User code supplies size of array of pointers errmsg_ptrs_array
3583
+ in count and the array of pointers (the pointers themselves
3584
+ need not be initialized).
3585
+ The pointers returned in the array of pointers
3586
+ are invalidated by ANY call to libdwarf.
3587
+ Use them before making another libdwarf call!
3588
+ The array of string pointers passed in always has
3589
+ a final null pointer, so if there are N pointers the
3590
+ and M actual strings, then MIN(M,N-1) pointers are
3591
+ set to point to error strings. The array of pointers
3592
+ to strings always terminates with a NULL pointer.
3593
+ If 'count' is passed in zero then errmsg_ptrs_array
3594
+ is not touched.
3595
+
3596
+ The function returns DW_DLV_NO_ENTRY if no harmless errors
3597
+ were noted so far. Returns DW_DLV_OK if there are errors.
3598
+ Never returns DW_DLV_ERROR.
3599
+
3600
+ Each call empties the error list (discarding all current entries).
3601
+ If newerr_count is non-NULL the count of harmless errors
3602
+ since the last call is returned through the pointer
3603
+ (some may have been discarded or not returned, it is a circular
3604
+ list...).
3605
+ If DW_DLV_NO_ENTRY is returned none of the arguments
3606
+ here are touched or used.
3607
+ */
3608
+ int dwarf_get_harmless_error_list(Dwarf_Debug /*dbg*/,
3609
+ unsigned /*count*/,
3610
+ const char ** /*errmsg_ptrs_array*/,
3611
+ unsigned * /*newerr_count*/);
3612
+
3613
+ /* Insertion is only for testing the harmless error code, it is not
3614
+ necessarily useful otherwise. */
3615
+ void dwarf_insert_harmless_error(Dwarf_Debug /*dbg*/,
3616
+ char * /*newerror*/);
3617
+
3618
+ /* The size of the circular list of strings may be set
3619
+ and reset as needed. If it is shortened excess
3620
+ messages are simply dropped. It returns the previous
3621
+ size. If zero passed in the size is unchanged
3622
+ and it simply returns the current size */
3623
+ unsigned dwarf_set_harmless_error_list_size(Dwarf_Debug /*dbg*/,
3624
+ unsigned /*maxcount*/);
3625
+ /* The harmless error strings (if any) are freed when the dbg
3626
+ is dwarf_finish()ed. */
3627
+
3628
+ /* When the val_in is known these dwarf_get_TAG_name (etc)
3629
+ functions return the string corresponding to the val_in passed in
3630
+ through the pointer s_out and the value returned is DW_DLV_OK.
3631
+ The strings are in static storage
3632
+ and must not be freed.
3633
+ If DW_DLV_NO_ENTRY is returned the val_in is not known and
3634
+ *s_out is not set. DW_DLV_ERROR is never returned.*/
3635
+
3636
+ /* The following copied from a generated dwarf_names.h */
3637
+
3638
+ /* BEGIN FILE */
3639
+
3640
+ extern int dwarf_get_TAG_name(unsigned int /*val_in*/, const char ** /*s_out */);
3641
+ extern int dwarf_get_children_name(unsigned int /*val_in*/, const char ** /*s_out */);
3642
+ extern int dwarf_get_FORM_name(unsigned int /*val_in*/, const char ** /*s_out */);
3643
+ extern int dwarf_get_AT_name(unsigned int /*val_in*/, const char ** /*s_out */);
3644
+ extern int dwarf_get_OP_name(unsigned int /*val_in*/, const char ** /*s_out */);
3645
+ extern int dwarf_get_ATE_name(unsigned int /*val_in*/, const char ** /*s_out */);
3646
+ extern int dwarf_get_DS_name(unsigned int /*val_in*/, const char ** /*s_out */);
3647
+ extern int dwarf_get_END_name(unsigned int /*val_in*/, const char ** /*s_out */);
3648
+ extern int dwarf_get_ATCF_name(unsigned int /*val_in*/, const char ** /*s_out */);
3649
+ extern int dwarf_get_ACCESS_name(unsigned int /*val_in*/, const char ** /*s_out */);
3650
+ extern int dwarf_get_VIS_name(unsigned int /*val_in*/, const char ** /*s_out */);
3651
+ extern int dwarf_get_VIRTUALITY_name(unsigned int /*val_in*/, const char ** /*s_out */);
3652
+ extern int dwarf_get_LANG_name(unsigned int /*val_in*/, const char ** /*s_out */);
3653
+ extern int dwarf_get_ID_name(unsigned int /*val_in*/, const char ** /*s_out */);
3654
+ extern int dwarf_get_CC_name(unsigned int /*val_in*/, const char ** /*s_out */);
3655
+ extern int dwarf_get_INL_name(unsigned int /*val_in*/, const char ** /*s_out */);
3656
+ extern int dwarf_get_ORD_name(unsigned int /*val_in*/, const char ** /*s_out */);
3657
+ extern int dwarf_get_DSC_name(unsigned int /*val_in*/, const char ** /*s_out */);
3658
+ extern int dwarf_get_LNS_name(unsigned int /*val_in*/, const char ** /*s_out */);
3659
+ extern int dwarf_get_LNE_name(unsigned int /*val_in*/, const char ** /*s_out */);
3660
+ extern int dwarf_get_LLE_name(unsigned int /*val_in*/, const char ** /*s_out */);
3661
+ extern int dwarf_get_ISA_name(unsigned int /*val_in*/, const char ** /*s_out */);
3662
+ extern int dwarf_get_MACINFO_name(unsigned int /*val_in*/, const char ** /*s_out */);
3663
+ extern int dwarf_get_CFA_name(unsigned int /*val_in*/, const char ** /*s_out */);
3664
+ extern int dwarf_get_EH_name(unsigned int /*val_in*/, const char ** /*s_out */);
3665
+ extern int dwarf_get_FRAME_name(unsigned int /*val_in*/, const char ** /*s_out */);
3666
+ extern int dwarf_get_CHILDREN_name(unsigned int /*val_in*/, const char ** /*s_out */);
3667
+ extern int dwarf_get_ADDR_name(unsigned int /*val_in*/, const char ** /*s_out */);
3668
+ extern int dwarf_get_SECT_name (unsigned int /*val_in*/,const char ** /*s_out*/);
3669
+ extern int dwarf_get_MACRO_name (unsigned int /*val_in*/,const char ** /*s_out*/);
3670
+ extern int dwarf_get_DEFAULT_name (unsigned int /*val_in*/,const char ** /*s_out*/);
3671
+ extern int dwarf_get_IDX_name (unsigned int /*val_in*/,const char ** /*s_out*/);
3672
+ extern int dwarf_get_LNCT_name (unsigned int /*val_in*/,const char ** /*s_out*/);
3673
+ extern int dwarf_get_UT_name (unsigned int /*val_in*/,const char ** /*s_out*/);
3674
+
3675
+ /* END FILE */
3676
+
3677
+ /* Convert local offset into global offset */
3678
+ int dwarf_convert_to_global_offset(Dwarf_Attribute /*attr*/,
3679
+ Dwarf_Off /*offset*/,
3680
+ Dwarf_Off* /*ret_offset*/,
3681
+ Dwarf_Error* /*error*/);
3682
+
3683
+ /* Get both offsets (local and global) */
3684
+ int dwarf_die_offsets(Dwarf_Die /*die*/,
3685
+ Dwarf_Off* /*global_offset*/,
3686
+ Dwarf_Off* /*local_offset*/,
3687
+ Dwarf_Error* /*error*/);
3688
+
3689
+ /* Giving a section name, get its size and address */
3690
+ int dwarf_get_section_info_by_name(Dwarf_Debug /*dbg*/,
3691
+ const char * /*section_name*/,
3692
+ Dwarf_Addr* /*section_addr*/,
3693
+ Dwarf_Unsigned* /*section_size*/,
3694
+ Dwarf_Error* /*error*/);
3695
+
3696
+ /* Giving a section index, get its size and address */
3697
+ int dwarf_get_section_info_by_index(Dwarf_Debug /*dbg*/,
3698
+ int /*section_index*/,
3699
+ const char ** /*section_name*/,
3700
+ Dwarf_Addr* /*section_addr*/,
3701
+ Dwarf_Unsigned* /*section_size*/,
3702
+ Dwarf_Error* /*error*/);
3703
+
3704
+ /* Get section count, of object file sections. */
3705
+ int dwarf_get_section_count(Dwarf_Debug /*dbg*/);
3706
+
3707
+ /* Get the version and offset size of a CU context.
3708
+ This is useful as a precursor to
3709
+ calling dwarf_get_form_class() at times. */
3710
+ int dwarf_get_version_of_die(Dwarf_Die /*die*/,
3711
+ Dwarf_Half * /*version*/,
3712
+ Dwarf_Half * /*offset_size*/);
3713
+
3714
+ /* These make the LEB encoding routines visible to libdwarf
3715
+ callers. Added November, 2012. */
3716
+ int dwarf_encode_leb128(Dwarf_Unsigned /*val*/,
3717
+ int * /*nbytes*/,
3718
+ char * /*space*/,
3719
+ int /*splen*/);
3720
+ int dwarf_encode_signed_leb128(Dwarf_Signed /*val*/,
3721
+ int * /*nbytes*/,
3722
+ char * /*space*/,
3723
+ int /*splen*/);
3724
+
3725
+ /* Record some application command line options in libdwarf.
3726
+ This is not arc/argv processing, just precooked setting
3727
+ of a flag in libdwarf based on something the application
3728
+ wants. check_verbose_mode of TRUE means do more checking
3729
+ and sometimes print errors (from libdwarf).
3730
+ Not restricted to a single Dwarf_Debug, it applies
3731
+ to the libdwarf the executable is using.
3732
+ */
3733
+ typedef struct {
3734
+ Dwarf_Bool check_verbose_mode;
3735
+ } Dwarf_Cmdline_Options;
3736
+ extern Dwarf_Cmdline_Options dwarf_cmdline_options;
3737
+
3738
+ /* Set libdwarf to reflect some application command line options. */
3739
+ void dwarf_record_cmdline_options(Dwarf_Cmdline_Options /*options*/);
3740
+
3741
+ #ifdef __cplusplus
3742
+ }
3743
+ #endif
3744
+ #endif /* _LIBDWARF_H */
3745
+
3746
+