1
1
2
2
#include " rust_internal.h"
3
3
4
- bool
5
- rust_crate_reader::mem_reader::is_ok ()
6
- {
7
- return ok;
8
- }
9
-
10
- bool
11
- rust_crate_reader::mem_reader::at_end ()
12
- {
13
- return pos == mem.lim ;
14
- }
15
-
16
- void
17
- rust_crate_reader::mem_reader::fail ()
18
- {
19
- ok = false ;
20
- }
21
-
22
- void
23
- rust_crate_reader::mem_reader::reset ()
24
- {
25
- pos = mem.base ;
26
- ok = true ;
27
- }
28
-
29
- rust_crate_reader::mem_reader::mem_reader (rust_crate::mem_area &m)
30
- : mem(m),
31
- ok(true ),
32
- pos(m.base)
33
- {}
34
-
35
- size_t
36
- rust_crate_reader::mem_reader::tell_abs ()
37
- {
38
- return pos;
39
- }
40
-
41
- size_t
42
- rust_crate_reader::mem_reader::tell_off ()
43
- {
44
- return pos - mem.base ;
45
- }
46
-
47
- void
48
- rust_crate_reader::mem_reader::seek_abs (uintptr_t p)
49
- {
50
- if (!ok || p < mem.base || p >= mem.lim )
51
- ok = false ;
52
- else
53
- pos = p;
54
- }
55
-
56
- void
57
- rust_crate_reader::mem_reader::seek_off (uintptr_t p)
58
- {
59
- seek_abs (p + mem.base );
60
- }
61
-
62
-
63
- bool
64
- rust_crate_reader::mem_reader::adv_zstr (size_t sz)
65
- {
66
- sz = 0 ;
67
- while (ok) {
68
- char c = 0 ;
69
- get (c);
70
- ++sz;
71
- if (c == ' \0 ' )
72
- return true ;
73
- }
74
- return false ;
75
- }
76
-
77
- bool
78
- rust_crate_reader::mem_reader::get_zstr (char const *&c, size_t &sz)
79
- {
80
- if (!ok)
81
- return false ;
82
- c = (char const *)(pos);
83
- return adv_zstr (sz);
84
- }
85
-
86
- void
87
- rust_crate_reader::mem_reader::adv (size_t amt)
88
- {
89
- if (pos < mem.base
90
- || pos >= mem.lim
91
- || pos + amt > mem.lim )
92
- ok = false ;
93
- if (!ok)
94
- return ;
95
- // mem.DLOG(dom, mem, "adv %d bytes", amt);
96
- pos += amt;
97
- ok &= !at_end ();
98
- I (mem.dom , at_end () || (mem.base <= pos && pos < mem.lim ));
99
- }
100
-
101
-
102
4
rust_crate_reader::abbrev::abbrev (rust_dom *dom,
103
5
uintptr_t body_off,
104
6
size_t body_sz,
@@ -111,72 +13,6 @@ rust_crate_reader::abbrev::abbrev(rust_dom *dom,
111
13
idx(0 )
112
14
{}
113
15
114
-
115
- rust_crate_reader::abbrev_reader::abbrev_reader
116
- (rust_crate::mem_area &abbrev_mem)
117
- : mem_reader(abbrev_mem),
118
- abbrevs (abbrev_mem.dom)
119
- {
120
- rust_dom *dom = mem.dom ;
121
- while (is_ok () && !at_end ()) {
122
-
123
- // DLOG(dom, dwarf, "reading new abbrev at 0x%" PRIxPTR,
124
- // tell_off());
125
-
126
- uintptr_t idx, tag;
127
- uint8_t has_children = 0 ;
128
- get_uleb (idx);
129
- get_uleb (tag);
130
- get (has_children);
131
-
132
- uintptr_t attr, form;
133
- size_t body_off = tell_off ();
134
- while (is_ok () && step_attr_form_pair (attr, form));
135
-
136
- // DLOG(dom, dwarf,
137
- // "finished scanning attr/form pairs, pos=0x%"
138
- // PRIxPTR ", lim=0x%" PRIxPTR ", is_ok=%d, at_end=%d",
139
- // pos, mem.lim, is_ok(), at_end());
140
-
141
- if (is_ok () || at_end ()) {
142
- DLOG (dom, dwarf, " read abbrev: %" PRIdPTR, idx);
143
- I (dom, idx = abbrevs.length () + 1 );
144
- abbrevs.push (new (dom) abbrev (dom, body_off,
145
- tell_off () - body_off,
146
- tag, has_children));
147
- }
148
- }
149
- }
150
-
151
- rust_crate_reader::abbrev *
152
- rust_crate_reader::abbrev_reader::get_abbrev (size_t i) {
153
- i -= 1 ;
154
- if (i < abbrevs.length ())
155
- return abbrevs[i];
156
- return NULL ;
157
- }
158
-
159
- bool
160
- rust_crate_reader::abbrev_reader::step_attr_form_pair (uintptr_t &attr,
161
- uintptr_t &form)
162
- {
163
- attr = 0 ;
164
- form = 0 ;
165
- // mem.DLOG(dom, dwarf, "reading attr/form pair at 0x%" PRIxPTR,
166
- // tell_off());
167
- get_uleb (attr);
168
- get_uleb (form);
169
- // mem.DLOG(dom, dwarf, "attr 0x%" PRIxPTR ", form 0x%" PRIxPTR,
170
- // attr, form);
171
- return ! (attr == 0 && form == 0 );
172
- }
173
- rust_crate_reader::abbrev_reader::~abbrev_reader () {
174
- while (abbrevs.length ()) {
175
- delete abbrevs.pop ();
176
- }
177
- }
178
-
179
-
180
16
bool
181
17
rust_crate_reader::attr::is_numeric () const
182
18
{
@@ -227,14 +63,9 @@ rust_crate_reader::attr::is_unknown() const {
227
63
228
64
rust_crate_reader::rust_crate_reader (rust_dom *dom,
229
65
rust_crate const *crate)
230
- : dom(dom),
231
- abbrev_mem(crate->get_debug_abbrev (dom)),
232
- abbrevs(abbrev_mem),
233
- die_mem(crate->get_debug_info (dom))
66
+ : dom(dom)
234
67
{
235
68
DLOG (dom, mem, " crate_reader on crate: 0x%" PRIxPTR, this );
236
- DLOG (dom, mem, " debug_abbrev: 0x%" PRIxPTR, abbrev_mem.base );
237
- DLOG (dom, mem, " debug_info: 0x%" PRIxPTR, die_mem.base );
238
69
}
239
70
240
71
0 commit comments