~ubuntu-branches/ubuntu/saucy/golang/saucy

« back to all changes in this revision

Viewing changes to src/pkg/debug/dwarf/entry.go

  • Committer: Package Import Robot
  • Author(s): Adam Conrad
  • Date: 2013-07-08 05:52:37 UTC
  • mfrom: (29.1.1 sid)
  • Revision ID: package-import@ubuntu.com-20130708055237-at01839e0hp8z3ni
Tags: 2:1.1-1ubuntu1
016-armhf-elf-header.patch: Use correct ELF header for armhf binaries.

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
        } else {
41
41
                data = data[off:]
42
42
        }
43
 
        b := makeBuf(d, "abbrev", 0, data, 0)
 
43
        b := makeBuf(d, unknownFormat{}, "abbrev", 0, data)
44
44
 
45
45
        // Error handling is simplified by the buf getters
46
46
        // returning an endless stream of 0s after an error.
185
185
                // flag
186
186
                case formFlag:
187
187
                        val = b.uint8() == 1
 
188
                case formFlagPresent:
 
189
                        // The attribute is implicitly indicated as present, and no value is
 
190
                        // encoded in the debugging information entry itself.
 
191
                        val = true
188
192
 
189
193
                // reference to other entry
190
194
                case formRefAddr:
191
 
                        val = Offset(b.addr())
 
195
                        vers := b.format.version()
 
196
                        if vers == 0 {
 
197
                                b.error("unknown version for DW_FORM_ref_addr")
 
198
                        } else if vers == 2 {
 
199
                                val = Offset(b.addr())
 
200
                        } else {
 
201
                                is64, known := b.format.dwarf64()
 
202
                                if !known {
 
203
                                        b.error("unknown size for DW_FORM_ref_addr")
 
204
                                } else if is64 {
 
205
                                        val = Offset(b.uint64())
 
206
                                } else {
 
207
                                        val = Offset(b.uint32())
 
208
                                }
 
209
                        }
192
210
                case formRef1:
193
211
                        val = Offset(b.uint8()) + ubase
194
212
                case formRef2:
208
226
                        if b.err != nil {
209
227
                                return nil
210
228
                        }
211
 
                        b1 := makeBuf(b.dwarf, "str", 0, b.dwarf.str, 0)
 
229
                        b1 := makeBuf(b.dwarf, unknownFormat{}, "str", 0, b.dwarf.str)
212
230
                        b1.skip(int(off))
213
231
                        val = b1.string()
214
232
                        if b1.err != nil {
258
276
                }
259
277
                u := &d.unit[0]
260
278
                r.unit = 0
261
 
                r.b = makeBuf(r.d, "info", u.off, u.data, u.addrsize)
 
279
                r.b = makeBuf(r.d, u, "info", u.off, u.data)
262
280
                return
263
281
        }
264
282
 
269
287
                u = &d.unit[i]
270
288
                if u.off <= off && off < u.off+Offset(len(u.data)) {
271
289
                        r.unit = i
272
 
                        r.b = makeBuf(r.d, "info", off, u.data[off-u.off:], u.addrsize)
 
290
                        r.b = makeBuf(r.d, u, "info", off, u.data[off-u.off:])
273
291
                        return
274
292
                }
275
293
        }
281
299
        for len(r.b.data) == 0 && r.unit+1 < len(r.d.unit) {
282
300
                r.unit++
283
301
                u := &r.d.unit[r.unit]
284
 
                r.b = makeBuf(r.d, "info", u.off, u.data, u.addrsize)
 
302
                r.b = makeBuf(r.d, u, "info", u.off, u.data)
285
303
        }
286
304
}
287
305