rdwarf 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +28 -0
- data/README.md +39 -0
- data/Rakefile +8 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/ext/rdwarf/depend +5 -0
- data/ext/rdwarf/extconf.rb +29 -0
- data/ext/rdwarf/libdwarf/CHANGES +102 -0
- data/ext/rdwarf/libdwarf/CODINGSTYLE +71 -0
- data/ext/rdwarf/libdwarf/COPYING +28 -0
- data/ext/rdwarf/libdwarf/ChangeLog +619 -0
- data/ext/rdwarf/libdwarf/ChangeLog2006 +835 -0
- data/ext/rdwarf/libdwarf/ChangeLog2007 +217 -0
- data/ext/rdwarf/libdwarf/ChangeLog2008 +263 -0
- data/ext/rdwarf/libdwarf/ChangeLog2009 +348 -0
- data/ext/rdwarf/libdwarf/ChangeLog2010 +175 -0
- data/ext/rdwarf/libdwarf/ChangeLog2011 +297 -0
- data/ext/rdwarf/libdwarf/ChangeLog2012 +131 -0
- data/ext/rdwarf/libdwarf/ChangeLog2013 +238 -0
- data/ext/rdwarf/libdwarf/ChangeLog2014 +399 -0
- data/ext/rdwarf/libdwarf/LGPL.txt +504 -0
- data/ext/rdwarf/libdwarf/LIBDWARFCOPYRIGHT +40 -0
- data/ext/rdwarf/libdwarf/Makefile.in +220 -0
- data/ext/rdwarf/libdwarf/NEWS +535 -0
- data/ext/rdwarf/libdwarf/README +235 -0
- data/ext/rdwarf/libdwarf/checkexamples.c +1179 -0
- data/ext/rdwarf/libdwarf/cmplrs/dwarf_addr_finder.h +55 -0
- data/ext/rdwarf/libdwarf/common.c +62 -0
- data/ext/rdwarf/libdwarf/common.h +38 -0
- data/ext/rdwarf/libdwarf/config.h.in +146 -0
- data/ext/rdwarf/libdwarf/configure +5581 -0
- data/ext/rdwarf/libdwarf/configure.in +167 -0
- data/ext/rdwarf/libdwarf/dw-linetableheader.txt +39 -0
- data/ext/rdwarf/libdwarf/dwarf.h +1342 -0
- data/ext/rdwarf/libdwarf/dwarf_abbrev.c +291 -0
- data/ext/rdwarf/libdwarf/dwarf_abbrev.h +45 -0
- data/ext/rdwarf/libdwarf/dwarf_addr_finder.c +676 -0
- data/ext/rdwarf/libdwarf/dwarf_alloc.c +685 -0
- data/ext/rdwarf/libdwarf/dwarf_alloc.h +38 -0
- data/ext/rdwarf/libdwarf/dwarf_arange.c +595 -0
- data/ext/rdwarf/libdwarf/dwarf_arange.h +62 -0
- data/ext/rdwarf/libdwarf/dwarf_base_types.h +157 -0
- data/ext/rdwarf/libdwarf/dwarf_die_deliv.c +1802 -0
- data/ext/rdwarf/libdwarf/dwarf_die_deliv.h +46 -0
- data/ext/rdwarf/libdwarf/dwarf_elf_access.c +1348 -0
- data/ext/rdwarf/libdwarf/dwarf_elf_access.h +46 -0
- data/ext/rdwarf/libdwarf/dwarf_error.c +492 -0
- data/ext/rdwarf/libdwarf/dwarf_error.h +53 -0
- data/ext/rdwarf/libdwarf/dwarf_form.c +1302 -0
- data/ext/rdwarf/libdwarf/dwarf_frame.c +2454 -0
- data/ext/rdwarf/libdwarf/dwarf_frame.h +418 -0
- data/ext/rdwarf/libdwarf/dwarf_frame2.c +1533 -0
- data/ext/rdwarf/libdwarf/dwarf_frame3.c +282 -0
- data/ext/rdwarf/libdwarf/dwarf_funcs.c +123 -0
- data/ext/rdwarf/libdwarf/dwarf_funcs.h +33 -0
- data/ext/rdwarf/libdwarf/dwarf_gdbindex.c +520 -0
- data/ext/rdwarf/libdwarf/dwarf_gdbindex.h +97 -0
- data/ext/rdwarf/libdwarf/dwarf_global.c +612 -0
- data/ext/rdwarf/libdwarf/dwarf_global.h +117 -0
- data/ext/rdwarf/libdwarf/dwarf_harmless.c +228 -0
- data/ext/rdwarf/libdwarf/dwarf_harmless.h +31 -0
- data/ext/rdwarf/libdwarf/dwarf_incl.h +61 -0
- data/ext/rdwarf/libdwarf/dwarf_init_finish.c +1263 -0
- data/ext/rdwarf/libdwarf/dwarf_leb.c +159 -0
- data/ext/rdwarf/libdwarf/dwarf_line.c +1822 -0
- data/ext/rdwarf/libdwarf/dwarf_line.h +446 -0
- data/ext/rdwarf/libdwarf/dwarf_line2.c +98 -0
- data/ext/rdwarf/libdwarf/dwarf_line_table_reader_common.c +1583 -0
- data/ext/rdwarf/libdwarf/dwarf_loc.c +1525 -0
- data/ext/rdwarf/libdwarf/dwarf_loc.h +149 -0
- data/ext/rdwarf/libdwarf/dwarf_loc2.c +833 -0
- data/ext/rdwarf/libdwarf/dwarf_macro.c +479 -0
- data/ext/rdwarf/libdwarf/dwarf_macro.h +35 -0
- data/ext/rdwarf/libdwarf/dwarf_opaque.h +778 -0
- data/ext/rdwarf/libdwarf/dwarf_original_elf_init.c +219 -0
- data/ext/rdwarf/libdwarf/dwarf_print_lines.c +631 -0
- data/ext/rdwarf/libdwarf/dwarf_pubtypes.c +132 -0
- data/ext/rdwarf/libdwarf/dwarf_query.c +1594 -0
- data/ext/rdwarf/libdwarf/dwarf_ranges.c +194 -0
- data/ext/rdwarf/libdwarf/dwarf_reloc_arm.h +308 -0
- data/ext/rdwarf/libdwarf/dwarf_reloc_mips.h +117 -0
- data/ext/rdwarf/libdwarf/dwarf_reloc_ppc.h +242 -0
- data/ext/rdwarf/libdwarf/dwarf_reloc_ppc64.h +272 -0
- data/ext/rdwarf/libdwarf/dwarf_reloc_x86_64.h +127 -0
- data/ext/rdwarf/libdwarf/dwarf_sort_line.c +665 -0
- data/ext/rdwarf/libdwarf/dwarf_string.c +82 -0
- data/ext/rdwarf/libdwarf/dwarf_stubs.c +38 -0
- data/ext/rdwarf/libdwarf/dwarf_tied.c +423 -0
- data/ext/rdwarf/libdwarf/dwarf_tsearch.h +125 -0
- data/ext/rdwarf/libdwarf/dwarf_tsearchhash.c +675 -0
- data/ext/rdwarf/libdwarf/dwarf_types.c +121 -0
- data/ext/rdwarf/libdwarf/dwarf_types.h +32 -0
- data/ext/rdwarf/libdwarf/dwarf_util.c +913 -0
- data/ext/rdwarf/libdwarf/dwarf_util.h +324 -0
- data/ext/rdwarf/libdwarf/dwarf_vars.c +125 -0
- data/ext/rdwarf/libdwarf/dwarf_vars.h +29 -0
- data/ext/rdwarf/libdwarf/dwarf_weaks.c +123 -0
- data/ext/rdwarf/libdwarf/dwarf_weaks.h +29 -0
- data/ext/rdwarf/libdwarf/dwarf_xu_index.c +579 -0
- data/ext/rdwarf/libdwarf/dwarf_xu_index.h +68 -0
- data/ext/rdwarf/libdwarf/dwgetopt.c +181 -0
- data/ext/rdwarf/libdwarf/dwgetopt.h +51 -0
- data/ext/rdwarf/libdwarf/gennames.c +531 -0
- data/ext/rdwarf/libdwarf/install.sh +119 -0
- data/ext/rdwarf/libdwarf/libdwarf.h.in +3746 -0
- data/ext/rdwarf/libdwarf/libdwarf2.1.mm +9805 -0
- data/ext/rdwarf/libdwarf/libdwarf2.1.pdf +0 -0
- data/ext/rdwarf/libdwarf/libdwarf2p.1.mm +2807 -0
- data/ext/rdwarf/libdwarf/libdwarf2p.1.pdf +0 -0
- data/ext/rdwarf/libdwarf/libdwarfdefs.h +81 -0
- data/ext/rdwarf/libdwarf/malloc_check.c +327 -0
- data/ext/rdwarf/libdwarf/malloc_check.h +52 -0
- data/ext/rdwarf/libdwarf/mips_extensions.mm +1266 -0
- data/ext/rdwarf/libdwarf/mips_extensions.pdf +0 -0
- data/ext/rdwarf/libdwarf/pro_alloc.c +179 -0
- data/ext/rdwarf/libdwarf/pro_alloc.h +33 -0
- data/ext/rdwarf/libdwarf/pro_arange.c +310 -0
- data/ext/rdwarf/libdwarf/pro_arange.h +51 -0
- data/ext/rdwarf/libdwarf/pro_die.c +431 -0
- data/ext/rdwarf/libdwarf/pro_die.h +59 -0
- data/ext/rdwarf/libdwarf/pro_encode_nm.c +108 -0
- data/ext/rdwarf/libdwarf/pro_encode_nm.h +39 -0
- data/ext/rdwarf/libdwarf/pro_error.c +96 -0
- data/ext/rdwarf/libdwarf/pro_error.h +43 -0
- data/ext/rdwarf/libdwarf/pro_expr.c +575 -0
- data/ext/rdwarf/libdwarf/pro_expr.h +36 -0
- data/ext/rdwarf/libdwarf/pro_finish.c +45 -0
- data/ext/rdwarf/libdwarf/pro_forms.c +1271 -0
- data/ext/rdwarf/libdwarf/pro_frame.c +572 -0
- data/ext/rdwarf/libdwarf/pro_frame.h +120 -0
- data/ext/rdwarf/libdwarf/pro_funcs.c +50 -0
- data/ext/rdwarf/libdwarf/pro_incl.h +91 -0
- data/ext/rdwarf/libdwarf/pro_init.c +327 -0
- data/ext/rdwarf/libdwarf/pro_line.c +373 -0
- data/ext/rdwarf/libdwarf/pro_line.h +112 -0
- data/ext/rdwarf/libdwarf/pro_macinfo.c +457 -0
- data/ext/rdwarf/libdwarf/pro_macinfo.h +31 -0
- data/ext/rdwarf/libdwarf/pro_opaque.h +513 -0
- data/ext/rdwarf/libdwarf/pro_pubnames.c +60 -0
- data/ext/rdwarf/libdwarf/pro_reloc.c +253 -0
- data/ext/rdwarf/libdwarf/pro_reloc.h +38 -0
- data/ext/rdwarf/libdwarf/pro_reloc_stream.c +256 -0
- data/ext/rdwarf/libdwarf/pro_reloc_stream.h +52 -0
- data/ext/rdwarf/libdwarf/pro_reloc_symbolic.c +245 -0
- data/ext/rdwarf/libdwarf/pro_reloc_symbolic.h +45 -0
- data/ext/rdwarf/libdwarf/pro_section.c +2233 -0
- data/ext/rdwarf/libdwarf/pro_section.h +100 -0
- data/ext/rdwarf/libdwarf/pro_types.c +274 -0
- data/ext/rdwarf/libdwarf/pro_types.h +34 -0
- data/ext/rdwarf/libdwarf/pro_util.h +38 -0
- data/ext/rdwarf/libdwarf/pro_vars.c +52 -0
- data/ext/rdwarf/libdwarf/pro_weaks.c +51 -0
- data/ext/rdwarf/rdwarf.c +765 -0
- data/ext/rdwarf/rdwarf.h +52 -0
- data/ext/rdwarf/rdwarf_names_gen.rb +109 -0
- data/lib/rdwarf.rb +181 -0
- data/lib/rdwarf/version.rb +3 -0
- data/rdwarf.gemspec +30 -0
- metadata +251 -0
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2000,2004 Silicon Graphics, Inc. All Rights Reserved.
|
|
4
|
+
Portions Copyright 2011 David Anderson. All Rights Reserved.
|
|
5
|
+
|
|
6
|
+
This program is free software; you can redistribute it and/or modify it
|
|
7
|
+
under the terms of version 2.1 of the GNU Lesser General Public License
|
|
8
|
+
as published by the Free Software Foundation.
|
|
9
|
+
|
|
10
|
+
This program is distributed in the hope that it would be useful, but
|
|
11
|
+
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
13
|
+
|
|
14
|
+
Further, this software is distributed without any warranty that it is
|
|
15
|
+
free of the rightful claim of any third person regarding infringement
|
|
16
|
+
or the like. Any license provided herein, whether implied or
|
|
17
|
+
otherwise, applies only to this software file. Patent licenses, if
|
|
18
|
+
any, provided herein do not apply to combinations of this program with
|
|
19
|
+
other software, or any other product whatsoever.
|
|
20
|
+
|
|
21
|
+
You should have received a copy of the GNU Lesser General Public
|
|
22
|
+
License along with this program; if not, write the Free Software
|
|
23
|
+
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301,
|
|
24
|
+
USA.
|
|
25
|
+
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
#include "config.h"
|
|
29
|
+
#include "libdwarfdefs.h"
|
|
30
|
+
#include <stdio.h>
|
|
31
|
+
#include <string.h>
|
|
32
|
+
#include "pro_incl.h"
|
|
33
|
+
#include "pro_section.h"
|
|
34
|
+
#include "pro_macinfo.h"
|
|
35
|
+
|
|
36
|
+
/* I don't much like the error strings this generates, since
|
|
37
|
+
like the rest of libdwarf they are simple strings with
|
|
38
|
+
no useful numbers in them. But that's not something I can
|
|
39
|
+
fix without more work than I have time for
|
|
40
|
+
right now. davea Nov 94.
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
/* these are gross overestimates of the number of
|
|
44
|
+
** bytes needed to store a number in LEB form.
|
|
45
|
+
** Just estimates, and since blocks are reasonable size,
|
|
46
|
+
** the end-block waste is small.
|
|
47
|
+
** Of course the waste is NOT present on disk.
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
#define COMMAND_LEN ENCODE_SPACE_NEEDED
|
|
51
|
+
#define LINE_LEN ENCODE_SPACE_NEEDED
|
|
52
|
+
#define BASE_MACINFO_MALLOC_LEN 2048
|
|
53
|
+
|
|
54
|
+
static int
|
|
55
|
+
libdwarf_compose_begin(Dwarf_P_Debug dbg, int code,
|
|
56
|
+
size_t maxlen, int *compose_error_type)
|
|
57
|
+
{
|
|
58
|
+
unsigned char *nextchar;
|
|
59
|
+
struct dw_macinfo_block_s *curblk = dbg->de_current_macinfo;
|
|
60
|
+
|
|
61
|
+
if (curblk == 0) {
|
|
62
|
+
struct dw_macinfo_block_s *newb;
|
|
63
|
+
size_t len;
|
|
64
|
+
|
|
65
|
+
/* initial allocation */
|
|
66
|
+
size_t blen = BASE_MACINFO_MALLOC_LEN;
|
|
67
|
+
|
|
68
|
+
if (blen < maxlen) {
|
|
69
|
+
blen = 2 * maxlen;
|
|
70
|
+
}
|
|
71
|
+
len = sizeof(struct dw_macinfo_block_s) + blen;
|
|
72
|
+
newb =
|
|
73
|
+
(struct dw_macinfo_block_s *) _dwarf_p_get_alloc(dbg, len);
|
|
74
|
+
if (!newb) {
|
|
75
|
+
*compose_error_type = DW_DLE_MACINFO_MALLOC_FAIL;
|
|
76
|
+
return DW_DLV_ERROR;
|
|
77
|
+
}
|
|
78
|
+
newb->mb_data =
|
|
79
|
+
(char *) newb + sizeof(struct dw_macinfo_block_s);
|
|
80
|
+
newb->mb_avail_len = blen;
|
|
81
|
+
newb->mb_used_len = 0;
|
|
82
|
+
newb->mb_macinfo_data_space_len = blen;
|
|
83
|
+
dbg->de_first_macinfo = newb;
|
|
84
|
+
dbg->de_current_macinfo = newb;
|
|
85
|
+
curblk = newb;
|
|
86
|
+
} else if (curblk->mb_avail_len < maxlen) {
|
|
87
|
+
struct dw_macinfo_block_s *newb;
|
|
88
|
+
size_t len;
|
|
89
|
+
|
|
90
|
+
/* no space left in block: allocate a new block */
|
|
91
|
+
size_t blen =
|
|
92
|
+
dbg->de_current_macinfo->mb_macinfo_data_space_len * 2;
|
|
93
|
+
if (blen < maxlen) {
|
|
94
|
+
blen = 2 * maxlen;
|
|
95
|
+
}
|
|
96
|
+
len = sizeof(struct dw_macinfo_block_s) + blen;
|
|
97
|
+
newb =
|
|
98
|
+
(struct dw_macinfo_block_s *) _dwarf_p_get_alloc(dbg, len);
|
|
99
|
+
if (!newb) {
|
|
100
|
+
*compose_error_type = DW_DLE_MACINFO_MALLOC_FAIL;
|
|
101
|
+
return DW_DLV_ERROR;
|
|
102
|
+
}
|
|
103
|
+
newb->mb_data =
|
|
104
|
+
(char *) newb + sizeof(struct dw_macinfo_block_s);
|
|
105
|
+
newb->mb_avail_len = blen;
|
|
106
|
+
newb->mb_used_len = 0;
|
|
107
|
+
newb->mb_macinfo_data_space_len = blen;
|
|
108
|
+
dbg->de_first_macinfo->mb_next = newb;
|
|
109
|
+
dbg->de_current_macinfo = newb;
|
|
110
|
+
curblk = newb;
|
|
111
|
+
}
|
|
112
|
+
/* now curblk has enough room */
|
|
113
|
+
dbg->de_compose_avail = curblk->mb_avail_len;
|
|
114
|
+
dbg->de_compose_used_len = curblk->mb_used_len;
|
|
115
|
+
nextchar =
|
|
116
|
+
(unsigned char *) (curblk->mb_data + dbg->de_compose_used_len);
|
|
117
|
+
*nextchar = code;
|
|
118
|
+
dbg->de_compose_avail--;
|
|
119
|
+
++dbg->de_compose_used_len;
|
|
120
|
+
return DW_DLV_OK;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
static void
|
|
126
|
+
libdwarf_compose_add_string(Dwarf_P_Debug dbg, const char *string, size_t len)
|
|
127
|
+
{
|
|
128
|
+
struct dw_macinfo_block_s *curblk = dbg->de_current_macinfo;
|
|
129
|
+
unsigned char *nextchar;
|
|
130
|
+
|
|
131
|
+
nextchar =
|
|
132
|
+
(unsigned char *) (curblk->mb_data + dbg->de_compose_used_len);
|
|
133
|
+
|
|
134
|
+
len += 1; /* count the null terminator */
|
|
135
|
+
|
|
136
|
+
memcpy(nextchar, string, len);
|
|
137
|
+
dbg->de_compose_avail -= len;
|
|
138
|
+
dbg->de_compose_used_len += len;
|
|
139
|
+
return;
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
static int
|
|
143
|
+
libdwarf_compose_add_line(Dwarf_P_Debug dbg,
|
|
144
|
+
Dwarf_Unsigned line, int *compose_error_type)
|
|
145
|
+
{
|
|
146
|
+
struct dw_macinfo_block_s *curblk = dbg->de_current_macinfo;
|
|
147
|
+
unsigned char *nextchar;
|
|
148
|
+
int res;
|
|
149
|
+
int nbytes;
|
|
150
|
+
|
|
151
|
+
nextchar =
|
|
152
|
+
(unsigned char *) (curblk->mb_data + dbg->de_compose_used_len);
|
|
153
|
+
|
|
154
|
+
/* Put the created leb number directly into the macro buffer If
|
|
155
|
+
dbg->de_compose_avail is > INT_MAX this will not work as the
|
|
156
|
+
'int' will look negative to _dwarf_pro_encode_leb128_nm! */
|
|
157
|
+
|
|
158
|
+
res = _dwarf_pro_encode_leb128_nm(line, &nbytes,
|
|
159
|
+
(char *) nextchar,
|
|
160
|
+
(int) dbg->de_compose_avail);
|
|
161
|
+
if (res != DW_DLV_OK) {
|
|
162
|
+
*compose_error_type = DW_DLE_MACINFO_INTERNAL_ERROR_SPACE;
|
|
163
|
+
return DW_DLV_ERROR;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
dbg->de_compose_avail -= nbytes;
|
|
167
|
+
dbg->de_compose_used_len += nbytes;
|
|
168
|
+
return DW_DLV_OK;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/* This function actually 'commits' the space used by the
|
|
172
|
+
preceeding calls. */
|
|
173
|
+
static int
|
|
174
|
+
libdwarf_compose_complete(Dwarf_P_Debug dbg, int *compose_error_type)
|
|
175
|
+
{
|
|
176
|
+
struct dw_macinfo_block_s *curblk = dbg->de_current_macinfo;
|
|
177
|
+
|
|
178
|
+
if (dbg->de_compose_used_len > curblk->mb_macinfo_data_space_len) {
|
|
179
|
+
*compose_error_type = DW_DLE_MACINFO_INTERNAL_ERROR_SPACE;
|
|
180
|
+
return DW_DLV_ERROR;
|
|
181
|
+
}
|
|
182
|
+
curblk->mb_avail_len = dbg->de_compose_avail;
|
|
183
|
+
curblk->mb_used_len = dbg->de_compose_used_len;
|
|
184
|
+
return DW_DLV_OK;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
int
|
|
190
|
+
dwarf_def_macro(Dwarf_P_Debug dbg,
|
|
191
|
+
Dwarf_Unsigned line,
|
|
192
|
+
char *macname, char *macvalue, Dwarf_Error * error)
|
|
193
|
+
{
|
|
194
|
+
size_t len;
|
|
195
|
+
size_t len2;
|
|
196
|
+
size_t length_est;
|
|
197
|
+
int res;
|
|
198
|
+
int compose_error_type;
|
|
199
|
+
|
|
200
|
+
if (dbg == NULL) {
|
|
201
|
+
_dwarf_p_error(NULL, error, DW_DLE_DBG_NULL);
|
|
202
|
+
return (DW_DLV_ERROR);
|
|
203
|
+
}
|
|
204
|
+
if (macname == 0) {
|
|
205
|
+
_dwarf_p_error(NULL, error, DW_DLE_MACINFO_STRING_NULL);
|
|
206
|
+
return (DW_DLV_ERROR);
|
|
207
|
+
}
|
|
208
|
+
len = strlen(macname) + 1;
|
|
209
|
+
if (len == 0) {
|
|
210
|
+
_dwarf_p_error(NULL, error, DW_DLE_MACINFO_STRING_EMPTY);
|
|
211
|
+
return (DW_DLV_ERROR);
|
|
212
|
+
}
|
|
213
|
+
if (macvalue) {
|
|
214
|
+
len2 = strlen(macvalue) + 1;
|
|
215
|
+
} else {
|
|
216
|
+
len2 = 0;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* 1 for space character we add */
|
|
220
|
+
length_est = COMMAND_LEN + LINE_LEN + len + len2 + 1;
|
|
221
|
+
|
|
222
|
+
res = libdwarf_compose_begin(dbg, DW_MACINFO_define, length_est,
|
|
223
|
+
&compose_error_type);
|
|
224
|
+
if (res != DW_DLV_OK) {
|
|
225
|
+
_dwarf_p_error(NULL, error, compose_error_type);
|
|
226
|
+
return (DW_DLV_ERROR);
|
|
227
|
+
}
|
|
228
|
+
res = libdwarf_compose_add_line(dbg, line, &compose_error_type);
|
|
229
|
+
if (res != DW_DLV_OK) {
|
|
230
|
+
_dwarf_p_error(NULL, error, compose_error_type);
|
|
231
|
+
return (DW_DLV_ERROR);
|
|
232
|
+
}
|
|
233
|
+
libdwarf_compose_add_string(dbg, macname, len);
|
|
234
|
+
libdwarf_compose_add_string(dbg, " ", 1);
|
|
235
|
+
if (macvalue) {
|
|
236
|
+
libdwarf_compose_add_string(dbg, " ", 1);
|
|
237
|
+
libdwarf_compose_add_string(dbg, macvalue, len2);
|
|
238
|
+
}
|
|
239
|
+
res = libdwarf_compose_complete(dbg, &compose_error_type);
|
|
240
|
+
if (res != DW_DLV_OK) {
|
|
241
|
+
_dwarf_p_error(NULL, error, compose_error_type);
|
|
242
|
+
return (DW_DLV_ERROR);
|
|
243
|
+
}
|
|
244
|
+
return DW_DLV_OK;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
int
|
|
248
|
+
dwarf_undef_macro(Dwarf_P_Debug dbg,
|
|
249
|
+
Dwarf_Unsigned line,
|
|
250
|
+
char *macname, Dwarf_Error * error)
|
|
251
|
+
{
|
|
252
|
+
|
|
253
|
+
size_t len;
|
|
254
|
+
size_t length_est;
|
|
255
|
+
int res;
|
|
256
|
+
int compose_error_type;
|
|
257
|
+
|
|
258
|
+
if (dbg == NULL) {
|
|
259
|
+
_dwarf_p_error(NULL, error, DW_DLE_DBG_NULL);
|
|
260
|
+
return (DW_DLV_ERROR);
|
|
261
|
+
}
|
|
262
|
+
if (macname == 0) {
|
|
263
|
+
_dwarf_p_error(NULL, error, DW_DLE_MACINFO_STRING_NULL);
|
|
264
|
+
return (DW_DLV_ERROR);
|
|
265
|
+
}
|
|
266
|
+
len = strlen(macname) + 1;
|
|
267
|
+
if (len == 0) {
|
|
268
|
+
_dwarf_p_error(NULL, error, DW_DLE_MACINFO_STRING_EMPTY);
|
|
269
|
+
return (DW_DLV_ERROR);
|
|
270
|
+
}
|
|
271
|
+
length_est = COMMAND_LEN + LINE_LEN + len;
|
|
272
|
+
res = libdwarf_compose_begin(dbg, DW_MACINFO_undef, length_est,
|
|
273
|
+
&compose_error_type);
|
|
274
|
+
if (res != DW_DLV_OK) {
|
|
275
|
+
_dwarf_p_error(NULL, error, compose_error_type);
|
|
276
|
+
return (DW_DLV_ERROR);
|
|
277
|
+
}
|
|
278
|
+
res = libdwarf_compose_add_line(dbg, line, &compose_error_type);
|
|
279
|
+
if (res != DW_DLV_OK) {
|
|
280
|
+
_dwarf_p_error(NULL, error, compose_error_type);
|
|
281
|
+
return (DW_DLV_ERROR);
|
|
282
|
+
}
|
|
283
|
+
libdwarf_compose_add_string(dbg, macname, len);
|
|
284
|
+
res = libdwarf_compose_complete(dbg, &compose_error_type);
|
|
285
|
+
if (res != DW_DLV_OK) {
|
|
286
|
+
_dwarf_p_error(NULL, error, compose_error_type);
|
|
287
|
+
return (DW_DLV_ERROR);
|
|
288
|
+
}
|
|
289
|
+
return DW_DLV_OK;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
int
|
|
293
|
+
dwarf_start_macro_file(Dwarf_P_Debug dbg,
|
|
294
|
+
Dwarf_Unsigned fileindex,
|
|
295
|
+
Dwarf_Unsigned linenumber, Dwarf_Error * error)
|
|
296
|
+
{
|
|
297
|
+
size_t length_est;
|
|
298
|
+
int res;
|
|
299
|
+
int compose_error_type;
|
|
300
|
+
|
|
301
|
+
if (dbg == NULL) {
|
|
302
|
+
_dwarf_p_error(NULL, error, DW_DLE_DBG_NULL);
|
|
303
|
+
return (DW_DLV_ERROR);
|
|
304
|
+
}
|
|
305
|
+
length_est = COMMAND_LEN + LINE_LEN + LINE_LEN;
|
|
306
|
+
res = libdwarf_compose_begin(dbg, DW_MACINFO_start_file, length_est,
|
|
307
|
+
&compose_error_type);
|
|
308
|
+
if (res != DW_DLV_OK) {
|
|
309
|
+
_dwarf_p_error(NULL, error, compose_error_type);
|
|
310
|
+
return (DW_DLV_ERROR);
|
|
311
|
+
}
|
|
312
|
+
res = libdwarf_compose_add_line(dbg, fileindex,
|
|
313
|
+
&compose_error_type);
|
|
314
|
+
if (res != DW_DLV_OK) {
|
|
315
|
+
_dwarf_p_error(NULL, error, compose_error_type);
|
|
316
|
+
return (DW_DLV_ERROR);
|
|
317
|
+
}
|
|
318
|
+
res = libdwarf_compose_add_line(dbg, linenumber,
|
|
319
|
+
&compose_error_type);
|
|
320
|
+
if (res != DW_DLV_OK) {
|
|
321
|
+
_dwarf_p_error(NULL, error, compose_error_type);
|
|
322
|
+
return (DW_DLV_ERROR);
|
|
323
|
+
}
|
|
324
|
+
return DW_DLV_OK;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
int
|
|
328
|
+
dwarf_end_macro_file(Dwarf_P_Debug dbg, Dwarf_Error * error)
|
|
329
|
+
{
|
|
330
|
+
size_t length_est;
|
|
331
|
+
int res;
|
|
332
|
+
int compose_error_type;
|
|
333
|
+
|
|
334
|
+
if (dbg == NULL) {
|
|
335
|
+
_dwarf_p_error(NULL, error, DW_DLE_DBG_NULL);
|
|
336
|
+
return (DW_DLV_ERROR);
|
|
337
|
+
}
|
|
338
|
+
length_est = COMMAND_LEN;
|
|
339
|
+
res = libdwarf_compose_begin(dbg, DW_MACINFO_end_file, length_est,
|
|
340
|
+
&compose_error_type);
|
|
341
|
+
if (res != DW_DLV_OK) {
|
|
342
|
+
_dwarf_p_error(NULL, error, compose_error_type);
|
|
343
|
+
return (DW_DLV_ERROR);
|
|
344
|
+
}
|
|
345
|
+
res = libdwarf_compose_complete(dbg, &compose_error_type);
|
|
346
|
+
if (res != DW_DLV_OK) {
|
|
347
|
+
_dwarf_p_error(NULL, error, compose_error_type);
|
|
348
|
+
return (DW_DLV_ERROR);
|
|
349
|
+
}
|
|
350
|
+
return DW_DLV_OK;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
int
|
|
354
|
+
dwarf_vendor_ext(Dwarf_P_Debug dbg,
|
|
355
|
+
Dwarf_Unsigned constant,
|
|
356
|
+
char *string, Dwarf_Error * error)
|
|
357
|
+
{
|
|
358
|
+
size_t len;
|
|
359
|
+
size_t length_est;
|
|
360
|
+
int res;
|
|
361
|
+
int compose_error_type;
|
|
362
|
+
|
|
363
|
+
if (dbg == NULL) {
|
|
364
|
+
_dwarf_p_error(NULL, error, DW_DLE_DBG_NULL);
|
|
365
|
+
return (DW_DLV_ERROR);
|
|
366
|
+
}
|
|
367
|
+
if (string == 0) {
|
|
368
|
+
_dwarf_p_error(NULL, error, DW_DLE_MACINFO_STRING_NULL);
|
|
369
|
+
return (DW_DLV_ERROR);
|
|
370
|
+
}
|
|
371
|
+
len = strlen(string) + 1;
|
|
372
|
+
if (len == 0) {
|
|
373
|
+
_dwarf_p_error(NULL, error, DW_DLE_MACINFO_STRING_EMPTY);
|
|
374
|
+
return (DW_DLV_ERROR);
|
|
375
|
+
}
|
|
376
|
+
length_est = COMMAND_LEN + LINE_LEN + len;
|
|
377
|
+
res = libdwarf_compose_begin(dbg, DW_MACINFO_vendor_ext, length_est,
|
|
378
|
+
&compose_error_type);
|
|
379
|
+
if (res != DW_DLV_OK) {
|
|
380
|
+
_dwarf_p_error(NULL, error, compose_error_type);
|
|
381
|
+
return (DW_DLV_ERROR);
|
|
382
|
+
}
|
|
383
|
+
res = libdwarf_compose_add_line(dbg, constant, &compose_error_type);
|
|
384
|
+
if (res != DW_DLV_OK) {
|
|
385
|
+
_dwarf_p_error(NULL, error, compose_error_type);
|
|
386
|
+
return (DW_DLV_ERROR);
|
|
387
|
+
}
|
|
388
|
+
libdwarf_compose_add_string(dbg, string, len);
|
|
389
|
+
libdwarf_compose_complete(dbg, &compose_error_type);
|
|
390
|
+
if (res != DW_DLV_OK) {
|
|
391
|
+
_dwarf_p_error(NULL, error, compose_error_type);
|
|
392
|
+
return (DW_DLV_ERROR);
|
|
393
|
+
}
|
|
394
|
+
return DW_DLV_OK;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
int
|
|
400
|
+
_dwarf_pro_transform_macro_info_to_disk(Dwarf_P_Debug dbg,
|
|
401
|
+
Dwarf_Error * error)
|
|
402
|
+
{
|
|
403
|
+
/* Total num of bytes in .debug_macinfo section. */
|
|
404
|
+
Dwarf_Unsigned mac_num_bytes;
|
|
405
|
+
|
|
406
|
+
/* Points to first byte of .debug_macinfo buffer. */
|
|
407
|
+
Dwarf_Small *macinfo;
|
|
408
|
+
|
|
409
|
+
/* Fills in the .debug_macinfo buffer. */
|
|
410
|
+
Dwarf_Small *macinfo_ptr;
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
/* Used to scan the section data buffers. */
|
|
414
|
+
struct dw_macinfo_block_s *m_prev;
|
|
415
|
+
struct dw_macinfo_block_s *m_sect;
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
/* Get the size of the debug_macinfo data */
|
|
419
|
+
mac_num_bytes = 0;
|
|
420
|
+
for (m_sect = dbg->de_first_macinfo; m_sect != NULL;
|
|
421
|
+
m_sect = m_sect->mb_next) {
|
|
422
|
+
mac_num_bytes += m_sect->mb_used_len;
|
|
423
|
+
}
|
|
424
|
+
/* The final entry has a type code of 0 to indicate It is final
|
|
425
|
+
for this CU Takes just 1 byte. */
|
|
426
|
+
mac_num_bytes += 1;
|
|
427
|
+
|
|
428
|
+
GET_CHUNK(dbg, dbg->de_elf_sects[DEBUG_MACINFO],
|
|
429
|
+
macinfo, (unsigned long) mac_num_bytes, error);
|
|
430
|
+
if (macinfo == NULL) {
|
|
431
|
+
_dwarf_p_error(dbg, error, DW_DLE_ALLOC_FAIL);
|
|
432
|
+
return (0);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
macinfo_ptr = macinfo;
|
|
436
|
+
m_prev = 0;
|
|
437
|
+
for (m_sect = dbg->de_first_macinfo; m_sect != NULL;
|
|
438
|
+
m_sect = m_sect->mb_next) {
|
|
439
|
+
memcpy(macinfo_ptr, m_sect->mb_data, m_sect->mb_used_len);
|
|
440
|
+
macinfo_ptr += m_sect->mb_used_len;
|
|
441
|
+
if (m_prev) {
|
|
442
|
+
_dwarf_p_dealloc(dbg, (Dwarf_Small *) m_prev);
|
|
443
|
+
m_prev = 0;
|
|
444
|
+
}
|
|
445
|
+
m_prev = m_sect;
|
|
446
|
+
}
|
|
447
|
+
*macinfo_ptr = 0; /* the type code of 0 as last entry */
|
|
448
|
+
if (m_prev) {
|
|
449
|
+
_dwarf_p_dealloc(dbg, (Dwarf_Small *) m_prev);
|
|
450
|
+
m_prev = 0;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
dbg->de_first_macinfo = NULL;
|
|
454
|
+
dbg->de_current_macinfo = NULL;
|
|
455
|
+
|
|
456
|
+
return (int) dbg->de_n_debug_sect;
|
|
457
|
+
}
|