/src/elfutils/libdw/libdwP.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* Internal definitions for libdw. |
2 | | Copyright (C) 2002-2011, 2013-2018 Red Hat, Inc. |
3 | | This file is part of elfutils. |
4 | | |
5 | | This file is free software; you can redistribute it and/or modify |
6 | | it under the terms of either |
7 | | |
8 | | * the GNU Lesser General Public License as published by the Free |
9 | | Software Foundation; either version 3 of the License, or (at |
10 | | your option) any later version |
11 | | |
12 | | or |
13 | | |
14 | | * the GNU General Public License as published by the Free |
15 | | Software Foundation; either version 2 of the License, or (at |
16 | | your option) any later version |
17 | | |
18 | | or both in parallel, as here. |
19 | | |
20 | | elfutils is distributed in the hope that it will be useful, but |
21 | | WITHOUT ANY WARRANTY; without even the implied warranty of |
22 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
23 | | General Public License for more details. |
24 | | |
25 | | You should have received copies of the GNU General Public License and |
26 | | the GNU Lesser General Public License along with this program. If |
27 | | not, see <http://www.gnu.org/licenses/>. */ |
28 | | |
29 | | #ifndef _LIBDWP_H |
30 | | #define _LIBDWP_H 1 |
31 | | |
32 | | #include <stdbool.h> |
33 | | #include <pthread.h> |
34 | | |
35 | | #include "libdw.h" |
36 | | #include "dwarf.h" |
37 | | #include "eu-search.h" |
38 | | |
39 | | |
40 | | /* Known location expressions already decoded. */ |
41 | | struct loc_s |
42 | | { |
43 | | void *addr; |
44 | | Dwarf_Op *loc; |
45 | | size_t nloc; |
46 | | }; |
47 | | |
48 | | /* Known DW_OP_implicit_value blocks already decoded. |
49 | | This overlaps struct loc_s exactly, but only the |
50 | | first member really has to match. */ |
51 | | struct loc_block_s |
52 | | { |
53 | | void *addr; |
54 | | unsigned char *data; |
55 | | size_t length; |
56 | | }; |
57 | | |
58 | | /* Already decoded .debug_line units. */ |
59 | | struct files_lines_s |
60 | | { |
61 | | Dwarf_Off debug_line_offset; |
62 | | Dwarf_Files *files; |
63 | | Dwarf_Lines *lines; |
64 | | }; |
65 | | |
66 | | /* Valid indices for the section data. */ |
67 | | enum |
68 | | { |
69 | | IDX_debug_info = 0, |
70 | | IDX_debug_types, |
71 | | IDX_debug_abbrev, |
72 | | IDX_debug_aranges, |
73 | | IDX_debug_addr, |
74 | | IDX_debug_line, |
75 | | IDX_debug_line_str, |
76 | | IDX_debug_frame, |
77 | | IDX_debug_loc, |
78 | | IDX_debug_loclists, |
79 | | IDX_debug_pubnames, |
80 | | IDX_debug_str, |
81 | | IDX_debug_str_offsets, |
82 | | IDX_debug_macinfo, |
83 | | IDX_debug_macro, |
84 | | IDX_debug_ranges, |
85 | | IDX_debug_rnglists, |
86 | | IDX_debug_cu_index, |
87 | | IDX_debug_tu_index, |
88 | | IDX_gnu_debugaltlink, |
89 | | IDX_last |
90 | | }; |
91 | | |
92 | | /* Valid indices for the string section's information. */ |
93 | | enum string_section_index |
94 | | { |
95 | | STR_SCN_IDX_debug_line_str, |
96 | | STR_SCN_IDX_debug_str, |
97 | | STR_SCN_IDX_last |
98 | | }; |
99 | | |
100 | | /* Error values. */ |
101 | | enum |
102 | | { |
103 | | DWARF_E_NOERROR = 0, |
104 | | DWARF_E_UNKNOWN_ERROR, |
105 | | DWARF_E_INVALID_ACCESS, |
106 | | DWARF_E_NO_REGFILE, |
107 | | DWARF_E_IO_ERROR, |
108 | | DWARF_E_INVALID_ELF, |
109 | | DWARF_E_NO_DWARF, |
110 | | DWARF_E_COMPRESSED_ERROR, |
111 | | DWARF_E_NOELF, |
112 | | DWARF_E_GETEHDR_ERROR, |
113 | | DWARF_E_NOMEM, |
114 | | DWARF_E_UNIMPL, |
115 | | DWARF_E_INVALID_CMD, |
116 | | DWARF_E_INVALID_VERSION, |
117 | | DWARF_E_INVALID_FILE, |
118 | | DWARF_E_NO_ENTRY, |
119 | | DWARF_E_INVALID_DWARF, |
120 | | DWARF_E_NO_STRING, |
121 | | DWARF_E_NO_DEBUG_STR, |
122 | | DWARF_E_NO_DEBUG_LINE_STR, |
123 | | DWARF_E_NO_STR_OFFSETS, |
124 | | DWARF_E_NO_ADDR, |
125 | | DWARF_E_NO_CONSTANT, |
126 | | DWARF_E_NO_REFERENCE, |
127 | | DWARF_E_INVALID_REFERENCE, |
128 | | DWARF_E_NO_DEBUG_LINE, |
129 | | DWARF_E_INVALID_DEBUG_LINE, |
130 | | DWARF_E_TOO_BIG, |
131 | | DWARF_E_VERSION, |
132 | | DWARF_E_INVALID_DIR_IDX, |
133 | | DWARF_E_ADDR_OUTOFRANGE, |
134 | | DWARF_E_NO_DEBUG_LOC, |
135 | | DWARF_E_NO_DEBUG_LOCLISTS, |
136 | | DWARF_E_NO_LOC_VALUE, |
137 | | DWARF_E_NO_BLOCK, |
138 | | DWARF_E_INVALID_LINE_IDX, |
139 | | DWARF_E_INVALID_ARANGE_IDX, |
140 | | DWARF_E_NO_MATCH, |
141 | | DWARF_E_NO_FLAG, |
142 | | DWARF_E_INVALID_OFFSET, |
143 | | DWARF_E_NO_DEBUG_RANGES, |
144 | | DWARF_E_NO_DEBUG_RNGLISTS, |
145 | | DWARF_E_INVALID_CFI, |
146 | | DWARF_E_NO_ALT_DEBUGLINK, |
147 | | DWARF_E_INVALID_OPCODE, |
148 | | DWARF_E_NOT_CUDIE, |
149 | | DWARF_E_UNKNOWN_LANGUAGE, |
150 | | DWARF_E_NO_DEBUG_ADDR, |
151 | | DWARF_E_UNKNOWN_SECTION, |
152 | | }; |
153 | | |
154 | | |
155 | | #include "dwarf_sig8_hash.h" |
156 | | |
157 | | /* The type of Dwarf object, sorted by preference |
158 | | (if there is a higher order type, we pick that one over the others). */ |
159 | | enum dwarf_type |
160 | | { |
161 | | TYPE_UNKNOWN = 0, |
162 | | TYPE_GNU_LTO = 16, |
163 | | TYPE_DWO = 32, |
164 | | TYPE_PLAIN = 64, |
165 | | }; |
166 | | |
167 | | /* This is the structure representing the debugging state. */ |
168 | | struct Dwarf |
169 | | { |
170 | | /* The underlying ELF file. */ |
171 | | Elf *elf; |
172 | | |
173 | | /* The (absolute) path to the ELF file, if known. To help locating |
174 | | dwp files. */ |
175 | | char *elfpath; |
176 | | |
177 | | /* The (absolute) path to the ELF dir, if known. To help locating |
178 | | alt and dwo files. */ |
179 | | char *debugdir; |
180 | | |
181 | | /* dwz alternate DWARF file. */ |
182 | | Dwarf *alt_dwarf; |
183 | | |
184 | | /* DWARF package file. */ |
185 | | Dwarf *dwp_dwarf; |
186 | | |
187 | | /* The section data. */ |
188 | | Elf_Data *sectiondata[IDX_last]; |
189 | | |
190 | | /* Size of a prefix of string sections, where any string will be |
191 | | null-terminated. */ |
192 | | size_t string_section_size[STR_SCN_IDX_last]; |
193 | | |
194 | | /* True if the file has a byte order different from the host. */ |
195 | | bool other_byte_order; |
196 | | |
197 | | /* If true, we allocated the ELF descriptor ourselves. */ |
198 | | bool free_elf; |
199 | | |
200 | | /* If >= 0, we allocated the alt_dwarf ourselves and must end it and |
201 | | close this file descriptor. */ |
202 | | int alt_fd; |
203 | | |
204 | | /* File descriptor of DWARF package file. */ |
205 | | int dwp_fd; |
206 | | |
207 | | /* Information for traversing the .debug_pubnames section. This is |
208 | | an array and separately allocated with malloc. */ |
209 | | struct pubnames_s |
210 | | { |
211 | | Dwarf_Off cu_offset; |
212 | | Dwarf_Off set_start; |
213 | | unsigned int cu_header_size; |
214 | | int address_len; |
215 | | } *pubnames_sets; |
216 | | size_t pubnames_nsets; |
217 | | |
218 | | /* Search tree for the CUs. */ |
219 | | search_tree cu_tree; |
220 | | Dwarf_Off next_cu_offset; |
221 | | |
222 | | /* Search tree and sig8 hash table for .debug_types type units. */ |
223 | | search_tree tu_tree; |
224 | | Dwarf_Off next_tu_offset; |
225 | | Dwarf_Sig8_Hash sig8_hash; |
226 | | |
227 | | /* Search tree for split Dwarf associated with CUs in this debug. */ |
228 | | search_tree split_tree; |
229 | | |
230 | | /* Search tree for .debug_macro operator tables. */ |
231 | | search_tree macro_ops_tree; |
232 | | |
233 | | /* Search tree for decoded .debug_line units. */ |
234 | | search_tree files_lines_tree; |
235 | | |
236 | | /* Address ranges read from .debug_aranges. */ |
237 | | Dwarf_Aranges *aranges; |
238 | | |
239 | | /* Address ranges inferred from CUs. */ |
240 | | Dwarf_Aranges *dieranges; |
241 | | |
242 | | /* Cached info from the CFI section. */ |
243 | | struct Dwarf_CFI_s *cfi; |
244 | | |
245 | | /* DWARF package file CU index section. */ |
246 | | struct Dwarf_Package_Index_s *cu_index; |
247 | | /* DWARF package file TU index section. */ |
248 | | struct Dwarf_Package_Index_s *tu_index; |
249 | | |
250 | | /* Fake loc CU. Used when synthesizing attributes for Dwarf_Ops that |
251 | | came from a location list entry in dwarf_getlocation_attr. |
252 | | Depending on version this is the .debug_loc or .debug_loclists |
253 | | section (could be both if mixing CUs with different DWARF versions). */ |
254 | | struct Dwarf_CU *fake_loc_cu; |
255 | | struct Dwarf_CU *fake_loclists_cu; |
256 | | |
257 | | /* Similar for addrx/constx, which will come from .debug_addr section. */ |
258 | | struct Dwarf_CU *fake_addr_cu; |
259 | | |
260 | | enum dwarf_type type; |
261 | | |
262 | | /* Supporting lock for internal memory handling. Ensures threads that have |
263 | | an entry in the mem_tails array are not disturbed by new threads doing |
264 | | allocations for this Dwarf. */ |
265 | | pthread_rwlock_t mem_rwl; |
266 | | |
267 | | /* Recursive mutex intended for setting/getting alt_dwarf, next_tu_offset, |
268 | | and next_cu_offset. Should be held when calling |
269 | | __libdw_intern_next_unit. */ |
270 | | mutex_define(, dwarf_lock); |
271 | | |
272 | | /* Synchronize access to dwarf_macro_getsrcfiles and cache_op_table. */ |
273 | | mutex_define(, macro_lock); |
274 | | |
275 | | /* Internal memory handling. This is basically a simplified thread-local |
276 | | reimplementation of obstacks. Unfortunately the standard obstack |
277 | | implementation is not usable in libraries. */ |
278 | | size_t mem_stacks; |
279 | | struct libdw_memblock |
280 | | { |
281 | | size_t size; |
282 | | size_t remaining; |
283 | | struct libdw_memblock *prev; |
284 | | char mem[0]; |
285 | | } **mem_tails; |
286 | | |
287 | | /* Default size of allocated memory blocks. */ |
288 | | size_t mem_default_size; |
289 | | |
290 | | /* Registered OOM handler. */ |
291 | | Dwarf_OOM oom_handler; |
292 | | }; |
293 | | |
294 | | |
295 | | /* Abbreviation representation. */ |
296 | | struct Dwarf_Abbrev |
297 | | { |
298 | | Dwarf_Off offset; /* Offset to start of abbrev into .debug_abbrev. */ |
299 | | unsigned char *attrp; /* Pointer to start of attribute name/form pairs. */ |
300 | | bool has_children : 1; /* Whether or not the DIE has children. */ |
301 | | unsigned int code : 31; /* The (unique) abbrev code. */ |
302 | | unsigned int tag; /* The tag of the DIE. */ |
303 | | } attribute_packed; |
304 | | |
305 | | #include "dwarf_abbrev_hash.h" |
306 | | |
307 | | |
308 | | /* Files in line information records. */ |
309 | | struct Dwarf_Files_s |
310 | | { |
311 | | unsigned int ndirs; |
312 | | unsigned int nfiles; |
313 | | struct Dwarf_Fileinfo_s |
314 | | { |
315 | | char *name; |
316 | | Dwarf_Word mtime; |
317 | | Dwarf_Word length; |
318 | | } info[0]; |
319 | | /* nfiles of those, followed by char *[ndirs]. */ |
320 | | }; |
321 | | typedef struct Dwarf_Fileinfo_s Dwarf_Fileinfo; |
322 | | |
323 | | |
324 | | /* Representation of a row in the line table. */ |
325 | | |
326 | | struct Dwarf_Line_s |
327 | | { |
328 | | Dwarf_Files *files; |
329 | | |
330 | | Dwarf_Addr addr; |
331 | | unsigned int file; |
332 | | int line; |
333 | | unsigned short int column; |
334 | | unsigned int is_stmt:1; |
335 | | unsigned int basic_block:1; |
336 | | unsigned int end_sequence:1; |
337 | | unsigned int prologue_end:1; |
338 | | unsigned int epilogue_begin:1; |
339 | | /* The remaining bit fields are not flags, but hold values presumed to be |
340 | | small. All the flags and other bit fields should add up to 48 bits |
341 | | to give the whole struct a nice round size. */ |
342 | | unsigned int op_index:8; |
343 | | unsigned int isa:8; |
344 | | unsigned int discriminator:24; |
345 | | /* These are currently only used for the NVIDIA extensions. */ |
346 | | unsigned int context; |
347 | | unsigned int function_name; |
348 | | }; |
349 | | |
350 | | struct Dwarf_Lines_s |
351 | | { |
352 | | size_t nlines; |
353 | | struct Dwarf_Line_s info[0]; |
354 | | }; |
355 | | |
356 | | /* Representation of address ranges. */ |
357 | | struct Dwarf_Aranges_s |
358 | | { |
359 | | Dwarf *dbg; |
360 | | size_t naranges; |
361 | | |
362 | | struct Dwarf_Arange_s |
363 | | { |
364 | | Dwarf_Addr addr; |
365 | | Dwarf_Word length; |
366 | | Dwarf_Off offset; |
367 | | } info[0]; |
368 | | }; |
369 | | |
370 | | /* DWARF package file unit index. */ |
371 | | typedef struct Dwarf_Package_Index_s |
372 | | { |
373 | | Dwarf *dbg; |
374 | | uint32_t section_count; |
375 | | uint32_t unit_count; |
376 | | uint32_t slot_count; |
377 | | /* Mapping from DW_SECT_* - 1 to column number in the section tables, or |
378 | | UINT32_MAX if not present. */ |
379 | | uint32_t sections[DW_SECT_RNGLISTS]; |
380 | | /* Row number of last unit found in the index. */ |
381 | | uint32_t last_unit_found; |
382 | | const unsigned char *hash_table; |
383 | | const unsigned char *indices; |
384 | | const unsigned char *section_offsets; |
385 | | const unsigned char *section_sizes; |
386 | | /* If DW_SECT_INFO section offsets were truncated to 32 bits, recovered |
387 | | 64-bit offsets. */ |
388 | | Dwarf_Off *debug_info_offsets; |
389 | | } Dwarf_Package_Index; |
390 | | |
391 | | /* CU representation. */ |
392 | | struct Dwarf_CU |
393 | | { |
394 | | Dwarf *dbg; |
395 | | Dwarf_Off start; |
396 | | Dwarf_Off end; |
397 | | /* Row number of this unit in DWARF package file index. */ |
398 | | uint32_t dwp_row; |
399 | | uint8_t address_size; |
400 | | uint8_t offset_size; |
401 | | uint16_t version; |
402 | | |
403 | | size_t sec_idx; /* Normally .debug_info, could be .debug_type or "fake". */ |
404 | | |
405 | | /* The unit type if version >= 5. Otherwise 0 for normal CUs (from |
406 | | .debug_info) or 1 for v4 type units (from .debug_types). */ |
407 | | uint8_t unit_type; |
408 | | |
409 | | /* Zero if the unit type doesn't support a die/type offset and/or id/sig. |
410 | | Nonzero if it is a v4 type unit or for DWARFv5 units depending on |
411 | | unit_type. */ |
412 | | size_t subdie_offset; |
413 | | uint64_t unit_id8; |
414 | | |
415 | | /* If this is a skeleton unit this points to the split compile unit. |
416 | | Or the other way around if this is a split compile unit. Set to -1 |
417 | | if not yet searched. Always use __libdw_find_split_unit to access |
418 | | this field. */ |
419 | | struct Dwarf_CU *split; |
420 | | |
421 | | /* Hash table for the abbreviations. */ |
422 | | Dwarf_Abbrev_Hash abbrev_hash; |
423 | | /* Offset of the first abbreviation. */ |
424 | | size_t orig_abbrev_offset; |
425 | | /* Offset past last read abbreviation. */ |
426 | | size_t last_abbrev_offset; |
427 | | |
428 | | /* The srcline information. */ |
429 | | Dwarf_Lines *lines; |
430 | | |
431 | | /* The source file information. */ |
432 | | Dwarf_Files *files; |
433 | | |
434 | | /* Known location lists. */ |
435 | | search_tree locs_tree; |
436 | | |
437 | | /* Base address for use with ranges and locs. |
438 | | Don't access directly, call __libdw_cu_base_address. */ |
439 | | Dwarf_Addr base_address; |
440 | | |
441 | | /* The offset into the .debug_addr section where index zero begins. |
442 | | Don't access directly, call __libdw_cu_addr_base. */ |
443 | | Dwarf_Off addr_base; |
444 | | |
445 | | /* The offset into the .debug_str_offsets section where index zero begins. |
446 | | Don't access directly, call __libdw_cu_str_off_base. */ |
447 | | Dwarf_Off str_off_base; |
448 | | |
449 | | /* The offset into the .debug_ranges section to use for GNU |
450 | | DebugFission split units. Don't access directly, call |
451 | | __libdw_cu_ranges_base. */ |
452 | | Dwarf_Off ranges_base; |
453 | | |
454 | | /* The start of the offset table in .debug_loclists. |
455 | | Don't access directly, call __libdw_cu_locs_base. */ |
456 | | Dwarf_Off locs_base; |
457 | | |
458 | | /* Synchronize access to the abbrev member of a Dwarf_Die that |
459 | | refers to this Dwarf_CU. Covers __libdw_die_abbrev. */ |
460 | | rwlock_define(, abbrev_lock); |
461 | | |
462 | | /* Synchronize access to the split member of this Dwarf_CU. |
463 | | Covers __libdw_find_split_unit. */ |
464 | | rwlock_define(, split_lock); |
465 | | |
466 | | /* Synchronize access to the lines and files members. |
467 | | Covers dwarf_getsrclines and dwarf_getsrcfiles. */ |
468 | | mutex_define(, src_lock); |
469 | | |
470 | | /* Synchronize access to the str_off_base of this Dwarf_CU. |
471 | | Covers __libdw_str_offsets_base_off. */ |
472 | | mutex_define(, str_off_base_lock); |
473 | | |
474 | | /* Synchronize access to is_constant_offset. Should also be held |
475 | | when calling __libdw_intern_expression with Dwarf_CU members. */ |
476 | | mutex_define(, intern_lock); |
477 | | |
478 | | /* Memory boundaries of this CU. */ |
479 | | void *startp; |
480 | | void *endp; |
481 | | }; |
482 | | |
483 | | /* Aliases to avoid PLTs. */ |
484 | | INTDECL (dwarf_aggregate_size) |
485 | | INTDECL (dwarf_attr) |
486 | | INTDECL (dwarf_attr_integrate) |
487 | | INTDECL (dwarf_begin) |
488 | | INTDECL (dwarf_begin_elf) |
489 | | INTDECL (dwarf_child) |
490 | | INTDECL (dwarf_cu_dwp_section_info) |
491 | | INTDECL (dwarf_default_lower_bound) |
492 | | INTDECL (dwarf_dieoffset) |
493 | | INTDECL (dwarf_diename) |
494 | | INTDECL (dwarf_end) |
495 | | INTDECL (dwarf_entrypc) |
496 | | INTDECL (dwarf_errmsg) |
497 | | INTDECL (dwarf_formaddr) |
498 | | INTDECL (dwarf_formblock) |
499 | | INTDECL (dwarf_formref_die) |
500 | | INTDECL (dwarf_formsdata) |
501 | | INTDECL (dwarf_formstring) |
502 | | INTDECL (dwarf_formudata) |
503 | | INTDECL (dwarf_getabbrevattr_data) |
504 | | INTDECL (dwarf_getalt) |
505 | | INTDECL (dwarf_getarange_addr) |
506 | | INTDECL (dwarf_getarangeinfo) |
507 | | INTDECL (dwarf_getaranges) |
508 | | INTDECL (dwarf_getlocation_die) |
509 | | INTDECL (dwarf_getsrcfiles) |
510 | | INTDECL (dwarf_getsrclines) |
511 | | INTDECL (dwarf_get_units) |
512 | | INTDECL (dwarf_hasattr) |
513 | | INTDECL (dwarf_haschildren) |
514 | | INTDECL (dwarf_haspc) |
515 | | INTDECL (dwarf_highpc) |
516 | | INTDECL (dwarf_language) |
517 | | INTDECL (dwarf_language_lower_bound) |
518 | | INTDECL (dwarf_lowpc) |
519 | | INTDECL (dwarf_nextcu) |
520 | | INTDECL (dwarf_next_unit) |
521 | | INTDECL (dwarf_offdie) |
522 | | INTDECL (dwarf_peel_type) |
523 | | INTDECL (dwarf_ranges) |
524 | | INTDECL (dwarf_setalt) |
525 | | INTDECL (dwarf_siblingof) |
526 | | INTDECL (dwarf_srclang) |
527 | | INTDECL (dwarf_tag) |
528 | | |
529 | | #define ISV4TU(cu) ((cu)->version == 4 && (cu)->sec_idx == IDX_debug_types) |
530 | | |
531 | | /* Compute the offset of a CU's first DIE from the CU offset. |
532 | | CU must be a valid/known version/unit_type. */ |
533 | | static inline Dwarf_Off |
534 | | __libdw_first_die_from_cu_start (Dwarf_Off cu_start, |
535 | | uint8_t offset_size, |
536 | | uint16_t version, |
537 | | uint8_t unit_type) |
538 | 0 | { |
539 | | /* |
540 | | assert (offset_size == 4 || offset_size == 8); |
541 | | assert (version >= 2 && version <= 5); |
542 | | assert (unit_type == DW_UT_compile |
543 | | || unit_type == DW_UT_partial |
544 | | || unit_type == DW_UT_skeleton |
545 | | || unit_type == DW_UT_split_compile |
546 | | || unit_type == DW_UT_type |
547 | | || unit_type == DW_UT_split_type); |
548 | | */ |
549 | |
|
550 | 0 | Dwarf_Off off = cu_start; |
551 | 0 | if (version < 5) |
552 | 0 | { |
553 | | /* |
554 | | LEN VER OFFSET ADDR |
555 | | 4-bytes + 2-bytes + 4-bytes + 1-byte for 32-bit dwarf |
556 | | 12-bytes + 2-bytes + 8-bytes + 1-byte for 64-bit dwarf |
557 | | or in .debug_types, SIGNATURE TYPE-OFFSET |
558 | | 4-bytes + 2-bytes + 4-bytes + 1-byte + 8-bytes + 4-bytes for 32-bit |
559 | | 12-bytes + 2-bytes + 8-bytes + 1-byte + 8-bytes + 8-bytes for 64-bit |
560 | | |
561 | | Note the trick in the computation. If the offset_size is 4 |
562 | | the '- 4' term changes the '3 *' (or '4 *') into a '2 *' (or '3 *). |
563 | | If the offset_size is 8 it accounts for the 4-byte escape value |
564 | | used at the start of the length. */ |
565 | 0 | if (unit_type != DW_UT_type) |
566 | 0 | off += 3 * offset_size - 4 + 3; |
567 | 0 | else |
568 | 0 | off += 4 * offset_size - 4 + 3 + 8; |
569 | 0 | } |
570 | 0 | else |
571 | 0 | { |
572 | | /* |
573 | | LEN VER TYPE ADDR OFFSET SIGNATURE TYPE-OFFSET |
574 | | 4-bytes + 2-bytes + 1-byte + 1-byte + 4-bytes + 8-bytes + 4-bytes 32-bit |
575 | | 12-bytes + 2-bytes + 1-byte + 1-byte + 8-bytes + 8-bytes + 8-bytes 64-bit |
576 | | Both signature and type offset are optional. |
577 | | |
578 | | Note same 4/8 offset size trick as above. |
579 | | We explicitly ignore unknown unit types (see asserts above). */ |
580 | 0 | off += 3 * offset_size - 4 + 4; |
581 | 0 | if (unit_type == DW_UT_skeleton || unit_type == DW_UT_split_compile |
582 | 0 | || unit_type == DW_UT_type || unit_type == DW_UT_split_type) |
583 | 0 | { |
584 | 0 | off += 8; |
585 | 0 | if (unit_type == DW_UT_type || unit_type == DW_UT_split_type) |
586 | 0 | off += offset_size; |
587 | 0 | } |
588 | 0 | } |
589 | |
|
590 | 0 | return off; |
591 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_end.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_error.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_module.c:__libdw_first_die_from_cu_start Unexecuted instantiation: offline.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_first_die_from_cu_start Unexecuted instantiation: find-debuginfo.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_first_die_from_cu_start Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_first_die_from_cu_start Unexecuted instantiation: open.c:__libdw_first_die_from_cu_start Unexecuted instantiation: image-header.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_frame.c:__libdw_first_die_from_cu_start Unexecuted instantiation: frame_unwind.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_frame_pc.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_frame_regs.c:__libdw_first_die_from_cu_start Unexecuted instantiation: gzip.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwflst_process_tracker.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_first_die_from_cu_start Unexecuted instantiation: mips_retval.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_begin_elf.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_end.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_tag.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_error.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_attr.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_child.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_formudata.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_formref_die.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_siblingof.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_diecu.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_hasattr.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_bytesize.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_bitsize.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_formflag.c:__libdw_first_die_from_cu_start Unexecuted instantiation: libdw_findcu.c:__libdw_first_die_from_cu_start Unexecuted instantiation: libdw_form.c:__libdw_first_die_from_cu_start Unexecuted instantiation: libdw_alloc.c:__libdw_first_die_from_cu_start Unexecuted instantiation: frame-cache.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_frame_register.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_cfi_end.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_getalt.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_setalt.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_peel_type.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_first_die_from_cu_start Unexecuted instantiation: libdw_find_split_unit.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_report_elf.c:__libdw_first_die_from_cu_start Unexecuted instantiation: relocate.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_module_build_id.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_first_die_from_cu_start Unexecuted instantiation: linux-proc-maps.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_addrmodule.c:__libdw_first_die_from_cu_start Unexecuted instantiation: libdwfl_crc32.c:__libdw_first_die_from_cu_start Unexecuted instantiation: elf-from-memory.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_first_die_from_cu_start Unexecuted instantiation: linux-pid-attach.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_begin.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_getabbrev.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_nextcu.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_offdie.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_formstring.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_haschildren.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_formsdata.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_formref.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_srclang.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_getlocation.c:__libdw_first_die_from_cu_start Unexecuted instantiation: fde.c:__libdw_first_die_from_cu_start Unexecuted instantiation: cfi.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_getcfi.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_get_units.c:__libdw_first_die_from_cu_start Unexecuted instantiation: segment.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_formaddr.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_lowpc.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_ranges.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_formblock.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_next_cfi.c:__libdw_first_die_from_cu_start Unexecuted instantiation: cie.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwarf_highpc.c:__libdw_first_die_from_cu_start Unexecuted instantiation: core-file.c:__libdw_first_die_from_cu_start Unexecuted instantiation: linux-core-attach.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_first_die_from_cu_start Unexecuted instantiation: link_map.c:__libdw_first_die_from_cu_start Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_first_die_from_cu_start Unexecuted instantiation: derelocate.c:__libdw_first_die_from_cu_start |
592 | | |
593 | | static inline Dwarf_Off |
594 | | __libdw_first_die_off_from_cu (struct Dwarf_CU *cu) |
595 | 0 | { |
596 | 0 | return __libdw_first_die_from_cu_start (cu->start, |
597 | 0 | cu->offset_size, |
598 | 0 | cu->version, |
599 | 0 | cu->unit_type); |
600 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_end.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_error.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_module.c:__libdw_first_die_off_from_cu Unexecuted instantiation: offline.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_first_die_off_from_cu Unexecuted instantiation: find-debuginfo.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_first_die_off_from_cu Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_first_die_off_from_cu Unexecuted instantiation: open.c:__libdw_first_die_off_from_cu Unexecuted instantiation: image-header.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_frame.c:__libdw_first_die_off_from_cu Unexecuted instantiation: frame_unwind.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_frame_pc.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_frame_regs.c:__libdw_first_die_off_from_cu Unexecuted instantiation: gzip.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwflst_process_tracker.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_first_die_off_from_cu Unexecuted instantiation: mips_retval.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_begin_elf.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_end.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_tag.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_error.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_attr.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_child.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_formudata.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_formref_die.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_siblingof.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_diecu.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_hasattr.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_bytesize.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_bitsize.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_formflag.c:__libdw_first_die_off_from_cu Unexecuted instantiation: libdw_findcu.c:__libdw_first_die_off_from_cu Unexecuted instantiation: libdw_form.c:__libdw_first_die_off_from_cu Unexecuted instantiation: libdw_alloc.c:__libdw_first_die_off_from_cu Unexecuted instantiation: frame-cache.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_frame_register.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_cfi_end.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_getalt.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_setalt.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_peel_type.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_first_die_off_from_cu Unexecuted instantiation: libdw_find_split_unit.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_report_elf.c:__libdw_first_die_off_from_cu Unexecuted instantiation: relocate.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_module_build_id.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_first_die_off_from_cu Unexecuted instantiation: linux-proc-maps.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_addrmodule.c:__libdw_first_die_off_from_cu Unexecuted instantiation: libdwfl_crc32.c:__libdw_first_die_off_from_cu Unexecuted instantiation: elf-from-memory.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_first_die_off_from_cu Unexecuted instantiation: linux-pid-attach.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_begin.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_getabbrev.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_nextcu.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_offdie.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_formstring.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_haschildren.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_formsdata.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_formref.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_srclang.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_getlocation.c:__libdw_first_die_off_from_cu Unexecuted instantiation: fde.c:__libdw_first_die_off_from_cu Unexecuted instantiation: cfi.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_getcfi.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_get_units.c:__libdw_first_die_off_from_cu Unexecuted instantiation: segment.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_formaddr.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_lowpc.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_ranges.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_formblock.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_next_cfi.c:__libdw_first_die_off_from_cu Unexecuted instantiation: cie.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwarf_highpc.c:__libdw_first_die_off_from_cu Unexecuted instantiation: core-file.c:__libdw_first_die_off_from_cu Unexecuted instantiation: linux-core-attach.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_first_die_off_from_cu Unexecuted instantiation: link_map.c:__libdw_first_die_off_from_cu Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_first_die_off_from_cu Unexecuted instantiation: derelocate.c:__libdw_first_die_off_from_cu |
601 | | |
602 | | #define CUDIE(fromcu) \ |
603 | 0 | ((Dwarf_Die) \ |
604 | 0 | { \ |
605 | 0 | .cu = (fromcu), \ |
606 | 0 | .addr = ((char *) (fromcu)->dbg->sectiondata[cu_sec_idx (fromcu)]->d_buf \ |
607 | 0 | + __libdw_first_die_off_from_cu (fromcu)) \ |
608 | 0 | }) |
609 | | |
610 | | #define SUBDIE(fromcu) \ |
611 | 0 | ((Dwarf_Die) \ |
612 | 0 | { \ |
613 | 0 | .cu = (fromcu), \ |
614 | 0 | .addr = ((char *) (fromcu)->dbg->sectiondata[cu_sec_idx (fromcu)]->d_buf \ |
615 | 0 | + (fromcu)->start + (fromcu)->subdie_offset) \ |
616 | 0 | }) |
617 | | |
618 | | |
619 | | /* Prototype of a single .debug_macro operator. */ |
620 | | typedef struct |
621 | | { |
622 | | Dwarf_Word nforms; |
623 | | unsigned char const *forms; |
624 | | } Dwarf_Macro_Op_Proto; |
625 | | |
626 | | /* Prototype table. */ |
627 | | typedef struct |
628 | | { |
629 | | Dwarf *dbg; |
630 | | |
631 | | /* Offset of .debug_macro section. */ |
632 | | Dwarf_Off offset; |
633 | | |
634 | | /* Offset of associated .debug_line section. */ |
635 | | Dwarf_Off line_offset; |
636 | | |
637 | | /* The source file information. */ |
638 | | Dwarf_Files *files; |
639 | | |
640 | | /* If this macro unit was opened through dwarf_getmacros or |
641 | | dwarf_getmacros_die, this caches value of DW_AT_comp_dir, if |
642 | | present. */ |
643 | | const char *comp_dir; |
644 | | |
645 | | /* Header length. */ |
646 | | Dwarf_Half header_len; |
647 | | |
648 | | uint16_t version; |
649 | | uint8_t address_size; |
650 | | uint8_t offset_size; |
651 | | uint8_t sec_index; /* IDX_debug_macro or IDX_debug_macinfo. */ |
652 | | |
653 | | /* Shows where in TABLE each opcode is defined. Since opcode 0 is |
654 | | never used, it stores index of opcode X in X-1'th element. The |
655 | | value of 0xff means not stored at all. */ |
656 | | unsigned char opcodes[255]; |
657 | | |
658 | | /* Individual opcode prototypes. */ |
659 | | Dwarf_Macro_Op_Proto table[]; |
660 | | } Dwarf_Macro_Op_Table; |
661 | | |
662 | | struct Dwarf_Macro_s |
663 | | { |
664 | | Dwarf_Macro_Op_Table *table; |
665 | | Dwarf_Attribute *attributes; |
666 | | uint8_t opcode; |
667 | | }; |
668 | | |
669 | | static inline Dwarf_Word |
670 | | libdw_macro_nforms (Dwarf_Macro *macro) |
671 | 0 | { |
672 | 0 | return macro->table->table[macro->table->opcodes[macro->opcode - 1]].nforms; |
673 | 0 | } Unexecuted instantiation: dwfl_begin.c:libdw_macro_nforms Unexecuted instantiation: dwfl_end.c:libdw_macro_nforms Unexecuted instantiation: dwfl_error.c:libdw_macro_nforms Unexecuted instantiation: dwfl_module.c:libdw_macro_nforms Unexecuted instantiation: offline.c:libdw_macro_nforms Unexecuted instantiation: dwfl_module_getdwarf.c:libdw_macro_nforms Unexecuted instantiation: find-debuginfo.c:libdw_macro_nforms Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:libdw_macro_nforms Unexecuted instantiation: libdwfl_crc32_file.c:libdw_macro_nforms Unexecuted instantiation: open.c:libdw_macro_nforms Unexecuted instantiation: image-header.c:libdw_macro_nforms Unexecuted instantiation: dwfl_frame.c:libdw_macro_nforms Unexecuted instantiation: frame_unwind.c:libdw_macro_nforms Unexecuted instantiation: dwfl_frame_pc.c:libdw_macro_nforms Unexecuted instantiation: dwfl_frame_regs.c:libdw_macro_nforms Unexecuted instantiation: gzip.c:libdw_macro_nforms Unexecuted instantiation: dwflst_process_tracker.c:libdw_macro_nforms Unexecuted instantiation: dwflst_tracker_find_elf.c:libdw_macro_nforms Unexecuted instantiation: dwflst_tracker_elftab.c:libdw_macro_nforms Unexecuted instantiation: dwflst_tracker_dwfltab.c:libdw_macro_nforms Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:libdw_macro_nforms Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:libdw_macro_nforms Unexecuted instantiation: dwelf_elf_gnu_build_id.c:libdw_macro_nforms Unexecuted instantiation: mips_retval.c:libdw_macro_nforms Unexecuted instantiation: dwarf_begin_elf.c:libdw_macro_nforms Unexecuted instantiation: dwarf_end.c:libdw_macro_nforms Unexecuted instantiation: dwarf_tag.c:libdw_macro_nforms Unexecuted instantiation: dwarf_error.c:libdw_macro_nforms Unexecuted instantiation: dwarf_attr.c:libdw_macro_nforms Unexecuted instantiation: dwarf_abbrev_hash.c:libdw_macro_nforms Unexecuted instantiation: dwarf_attr_integrate.c:libdw_macro_nforms Unexecuted instantiation: dwarf_hasattr_integrate.c:libdw_macro_nforms Unexecuted instantiation: dwarf_child.c:libdw_macro_nforms Unexecuted instantiation: dwarf_formudata.c:libdw_macro_nforms Unexecuted instantiation: dwarf_formref_die.c:libdw_macro_nforms Unexecuted instantiation: dwarf_siblingof.c:libdw_macro_nforms Unexecuted instantiation: dwarf_diecu.c:libdw_macro_nforms Unexecuted instantiation: dwarf_hasattr.c:libdw_macro_nforms Unexecuted instantiation: dwarf_bytesize.c:libdw_macro_nforms Unexecuted instantiation: dwarf_bitsize.c:libdw_macro_nforms Unexecuted instantiation: dwarf_formflag.c:libdw_macro_nforms Unexecuted instantiation: libdw_findcu.c:libdw_macro_nforms Unexecuted instantiation: libdw_form.c:libdw_macro_nforms Unexecuted instantiation: libdw_alloc.c:libdw_macro_nforms Unexecuted instantiation: frame-cache.c:libdw_macro_nforms Unexecuted instantiation: dwarf_frame_cfa.c:libdw_macro_nforms Unexecuted instantiation: dwarf_frame_register.c:libdw_macro_nforms Unexecuted instantiation: dwarf_cfi_addrframe.c:libdw_macro_nforms Unexecuted instantiation: dwarf_cfi_end.c:libdw_macro_nforms Unexecuted instantiation: dwarf_aggregate_size.c:libdw_macro_nforms Unexecuted instantiation: dwarf_getalt.c:libdw_macro_nforms Unexecuted instantiation: dwarf_setalt.c:libdw_macro_nforms Unexecuted instantiation: dwarf_peel_type.c:libdw_macro_nforms Unexecuted instantiation: dwarf_default_lower_bound.c:libdw_macro_nforms Unexecuted instantiation: libdw_find_split_unit.c:libdw_macro_nforms Unexecuted instantiation: dwarf_cu_dwp_section_info.c:libdw_macro_nforms Unexecuted instantiation: dwfl_report_elf.c:libdw_macro_nforms Unexecuted instantiation: relocate.c:libdw_macro_nforms Unexecuted instantiation: dwfl_module_build_id.c:libdw_macro_nforms Unexecuted instantiation: dwfl_build_id_find_elf.c:libdw_macro_nforms Unexecuted instantiation: linux-proc-maps.c:libdw_macro_nforms Unexecuted instantiation: dwfl_addrmodule.c:libdw_macro_nforms Unexecuted instantiation: libdwfl_crc32.c:libdw_macro_nforms Unexecuted instantiation: elf-from-memory.c:libdw_macro_nforms Unexecuted instantiation: dwfl_module_dwarf_cfi.c:libdw_macro_nforms Unexecuted instantiation: dwfl_module_eh_cfi.c:libdw_macro_nforms Unexecuted instantiation: linux-pid-attach.c:libdw_macro_nforms Unexecuted instantiation: dwarf_begin.c:libdw_macro_nforms Unexecuted instantiation: dwarf_getabbrev.c:libdw_macro_nforms Unexecuted instantiation: dwarf_nextcu.c:libdw_macro_nforms Unexecuted instantiation: dwarf_offdie.c:libdw_macro_nforms Unexecuted instantiation: dwarf_formstring.c:libdw_macro_nforms Unexecuted instantiation: dwarf_haschildren.c:libdw_macro_nforms Unexecuted instantiation: dwarf_formsdata.c:libdw_macro_nforms Unexecuted instantiation: dwarf_formref.c:libdw_macro_nforms Unexecuted instantiation: dwarf_srclang.c:libdw_macro_nforms Unexecuted instantiation: dwarf_getlocation.c:libdw_macro_nforms Unexecuted instantiation: fde.c:libdw_macro_nforms Unexecuted instantiation: cfi.c:libdw_macro_nforms Unexecuted instantiation: dwarf_getcfi.c:libdw_macro_nforms Unexecuted instantiation: dwarf_getcfi_elf.c:libdw_macro_nforms Unexecuted instantiation: dwarf_get_units.c:libdw_macro_nforms Unexecuted instantiation: segment.c:libdw_macro_nforms Unexecuted instantiation: dwarf_formaddr.c:libdw_macro_nforms Unexecuted instantiation: dwarf_lowpc.c:libdw_macro_nforms Unexecuted instantiation: dwarf_ranges.c:libdw_macro_nforms Unexecuted instantiation: dwarf_formblock.c:libdw_macro_nforms Unexecuted instantiation: dwarf_next_cfi.c:libdw_macro_nforms Unexecuted instantiation: cie.c:libdw_macro_nforms Unexecuted instantiation: dwarf_highpc.c:libdw_macro_nforms Unexecuted instantiation: core-file.c:libdw_macro_nforms Unexecuted instantiation: linux-core-attach.c:libdw_macro_nforms Unexecuted instantiation: dwfl_segment_report_module.c:libdw_macro_nforms Unexecuted instantiation: link_map.c:libdw_macro_nforms Unexecuted instantiation: dwfl_module_report_build_id.c:libdw_macro_nforms Unexecuted instantiation: derelocate.c:libdw_macro_nforms |
674 | | |
675 | | /* Returns true for any allowed FORM in the opcode_operands_table as |
676 | | mentioned in the DWARF5 spec (6.3.1 Macro Information Header). |
677 | | Or those mentioned in DWARF5 spec (6.2.4.2 Vendor-defined Content |
678 | | Descriptions) for the directory/file table (plus DW_FORM_strp_sup). */ |
679 | | static inline bool |
680 | | libdw_valid_user_form (int form) |
681 | 0 | { |
682 | 0 | switch (form) |
683 | 0 | { |
684 | 0 | case DW_FORM_block: |
685 | 0 | case DW_FORM_block1: |
686 | 0 | case DW_FORM_block2: |
687 | 0 | case DW_FORM_block4: |
688 | 0 | case DW_FORM_data1: |
689 | 0 | case DW_FORM_data2: |
690 | 0 | case DW_FORM_data4: |
691 | 0 | case DW_FORM_data8: |
692 | 0 | case DW_FORM_data16: |
693 | 0 | case DW_FORM_flag: |
694 | 0 | case DW_FORM_line_strp: |
695 | 0 | case DW_FORM_sdata: |
696 | 0 | case DW_FORM_sec_offset: |
697 | 0 | case DW_FORM_string: |
698 | 0 | case DW_FORM_strp: |
699 | 0 | case DW_FORM_strp_sup: |
700 | 0 | case DW_FORM_strx: |
701 | 0 | case DW_FORM_strx1: |
702 | 0 | case DW_FORM_strx2: |
703 | 0 | case DW_FORM_strx3: |
704 | 0 | case DW_FORM_strx4: |
705 | 0 | case DW_FORM_udata: |
706 | 0 | return true; |
707 | 0 | default: |
708 | 0 | return false; |
709 | 0 | } |
710 | 0 | } Unexecuted instantiation: dwfl_begin.c:libdw_valid_user_form Unexecuted instantiation: dwfl_end.c:libdw_valid_user_form Unexecuted instantiation: dwfl_error.c:libdw_valid_user_form Unexecuted instantiation: dwfl_module.c:libdw_valid_user_form Unexecuted instantiation: offline.c:libdw_valid_user_form Unexecuted instantiation: dwfl_module_getdwarf.c:libdw_valid_user_form Unexecuted instantiation: find-debuginfo.c:libdw_valid_user_form Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:libdw_valid_user_form Unexecuted instantiation: libdwfl_crc32_file.c:libdw_valid_user_form Unexecuted instantiation: open.c:libdw_valid_user_form Unexecuted instantiation: image-header.c:libdw_valid_user_form Unexecuted instantiation: dwfl_frame.c:libdw_valid_user_form Unexecuted instantiation: frame_unwind.c:libdw_valid_user_form Unexecuted instantiation: dwfl_frame_pc.c:libdw_valid_user_form Unexecuted instantiation: dwfl_frame_regs.c:libdw_valid_user_form Unexecuted instantiation: gzip.c:libdw_valid_user_form Unexecuted instantiation: dwflst_process_tracker.c:libdw_valid_user_form Unexecuted instantiation: dwflst_tracker_find_elf.c:libdw_valid_user_form Unexecuted instantiation: dwflst_tracker_elftab.c:libdw_valid_user_form Unexecuted instantiation: dwflst_tracker_dwfltab.c:libdw_valid_user_form Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:libdw_valid_user_form Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:libdw_valid_user_form Unexecuted instantiation: dwelf_elf_gnu_build_id.c:libdw_valid_user_form Unexecuted instantiation: mips_retval.c:libdw_valid_user_form Unexecuted instantiation: dwarf_begin_elf.c:libdw_valid_user_form Unexecuted instantiation: dwarf_end.c:libdw_valid_user_form Unexecuted instantiation: dwarf_tag.c:libdw_valid_user_form Unexecuted instantiation: dwarf_error.c:libdw_valid_user_form Unexecuted instantiation: dwarf_attr.c:libdw_valid_user_form Unexecuted instantiation: dwarf_abbrev_hash.c:libdw_valid_user_form Unexecuted instantiation: dwarf_attr_integrate.c:libdw_valid_user_form Unexecuted instantiation: dwarf_hasattr_integrate.c:libdw_valid_user_form Unexecuted instantiation: dwarf_child.c:libdw_valid_user_form Unexecuted instantiation: dwarf_formudata.c:libdw_valid_user_form Unexecuted instantiation: dwarf_formref_die.c:libdw_valid_user_form Unexecuted instantiation: dwarf_siblingof.c:libdw_valid_user_form Unexecuted instantiation: dwarf_diecu.c:libdw_valid_user_form Unexecuted instantiation: dwarf_hasattr.c:libdw_valid_user_form Unexecuted instantiation: dwarf_bytesize.c:libdw_valid_user_form Unexecuted instantiation: dwarf_bitsize.c:libdw_valid_user_form Unexecuted instantiation: dwarf_formflag.c:libdw_valid_user_form Unexecuted instantiation: libdw_findcu.c:libdw_valid_user_form Unexecuted instantiation: libdw_form.c:libdw_valid_user_form Unexecuted instantiation: libdw_alloc.c:libdw_valid_user_form Unexecuted instantiation: frame-cache.c:libdw_valid_user_form Unexecuted instantiation: dwarf_frame_cfa.c:libdw_valid_user_form Unexecuted instantiation: dwarf_frame_register.c:libdw_valid_user_form Unexecuted instantiation: dwarf_cfi_addrframe.c:libdw_valid_user_form Unexecuted instantiation: dwarf_cfi_end.c:libdw_valid_user_form Unexecuted instantiation: dwarf_aggregate_size.c:libdw_valid_user_form Unexecuted instantiation: dwarf_getalt.c:libdw_valid_user_form Unexecuted instantiation: dwarf_setalt.c:libdw_valid_user_form Unexecuted instantiation: dwarf_peel_type.c:libdw_valid_user_form Unexecuted instantiation: dwarf_default_lower_bound.c:libdw_valid_user_form Unexecuted instantiation: libdw_find_split_unit.c:libdw_valid_user_form Unexecuted instantiation: dwarf_cu_dwp_section_info.c:libdw_valid_user_form Unexecuted instantiation: dwfl_report_elf.c:libdw_valid_user_form Unexecuted instantiation: relocate.c:libdw_valid_user_form Unexecuted instantiation: dwfl_module_build_id.c:libdw_valid_user_form Unexecuted instantiation: dwfl_build_id_find_elf.c:libdw_valid_user_form Unexecuted instantiation: linux-proc-maps.c:libdw_valid_user_form Unexecuted instantiation: dwfl_addrmodule.c:libdw_valid_user_form Unexecuted instantiation: libdwfl_crc32.c:libdw_valid_user_form Unexecuted instantiation: elf-from-memory.c:libdw_valid_user_form Unexecuted instantiation: dwfl_module_dwarf_cfi.c:libdw_valid_user_form Unexecuted instantiation: dwfl_module_eh_cfi.c:libdw_valid_user_form Unexecuted instantiation: linux-pid-attach.c:libdw_valid_user_form Unexecuted instantiation: dwarf_begin.c:libdw_valid_user_form Unexecuted instantiation: dwarf_getabbrev.c:libdw_valid_user_form Unexecuted instantiation: dwarf_nextcu.c:libdw_valid_user_form Unexecuted instantiation: dwarf_offdie.c:libdw_valid_user_form Unexecuted instantiation: dwarf_formstring.c:libdw_valid_user_form Unexecuted instantiation: dwarf_haschildren.c:libdw_valid_user_form Unexecuted instantiation: dwarf_formsdata.c:libdw_valid_user_form Unexecuted instantiation: dwarf_formref.c:libdw_valid_user_form Unexecuted instantiation: dwarf_srclang.c:libdw_valid_user_form Unexecuted instantiation: dwarf_getlocation.c:libdw_valid_user_form Unexecuted instantiation: fde.c:libdw_valid_user_form Unexecuted instantiation: cfi.c:libdw_valid_user_form Unexecuted instantiation: dwarf_getcfi.c:libdw_valid_user_form Unexecuted instantiation: dwarf_getcfi_elf.c:libdw_valid_user_form Unexecuted instantiation: dwarf_get_units.c:libdw_valid_user_form Unexecuted instantiation: segment.c:libdw_valid_user_form Unexecuted instantiation: dwarf_formaddr.c:libdw_valid_user_form Unexecuted instantiation: dwarf_lowpc.c:libdw_valid_user_form Unexecuted instantiation: dwarf_ranges.c:libdw_valid_user_form Unexecuted instantiation: dwarf_formblock.c:libdw_valid_user_form Unexecuted instantiation: dwarf_next_cfi.c:libdw_valid_user_form Unexecuted instantiation: cie.c:libdw_valid_user_form Unexecuted instantiation: dwarf_highpc.c:libdw_valid_user_form Unexecuted instantiation: core-file.c:libdw_valid_user_form Unexecuted instantiation: linux-core-attach.c:libdw_valid_user_form Unexecuted instantiation: dwfl_segment_report_module.c:libdw_valid_user_form Unexecuted instantiation: link_map.c:libdw_valid_user_form Unexecuted instantiation: dwfl_module_report_build_id.c:libdw_valid_user_form Unexecuted instantiation: derelocate.c:libdw_valid_user_form |
711 | | |
712 | | |
713 | | /* We have to include the file at this point because the inline |
714 | | functions access internals of the Dwarf structure. */ |
715 | | #include "memory-access.h" |
716 | | |
717 | | |
718 | | /* Set error value. */ |
719 | | extern void __libdw_seterrno (int value) internal_function; |
720 | | |
721 | | |
722 | | /* Memory handling, the easy parts. */ |
723 | | #define libdw_alloc(dbg, type, tsize, cnt) \ |
724 | 0 | ({ struct libdw_memblock *_tail = __libdw_alloc_tail(dbg); \ |
725 | 0 | size_t _required = (tsize) * (cnt); \ |
726 | 0 | type *_result = (type *) (_tail->mem + (_tail->size - _tail->remaining));\ |
727 | 0 | size_t _padding = ((__alignof (type) \ |
728 | 0 | - ((uintptr_t) _result & (__alignof (type) - 1))) \ |
729 | 0 | & (__alignof (type) - 1)); \ |
730 | 0 | if (unlikely (_tail->remaining < _required + _padding)) \ |
731 | 0 | _result = (type *) __libdw_allocate (dbg, _required, __alignof (type));\ |
732 | 0 | else \ |
733 | 0 | { \ |
734 | 0 | _required += _padding; \ |
735 | 0 | _result = (type *) ((char *) _result + _padding); \ |
736 | 0 | _tail->remaining -= _required; \ |
737 | 0 | } \ |
738 | 0 | _result; }) |
739 | | |
740 | | #define libdw_typed_alloc(dbg, type) \ |
741 | 0 | libdw_alloc (dbg, type, sizeof (type), 1) |
742 | | |
743 | | /* Can only be used to undo the last libdw_alloc. */ |
744 | | #define libdw_unalloc(dbg, type, tsize, cnt) \ |
745 | 0 | ({ struct libdw_memblock *_tail = __libdw_thread_tail (dbg); \ |
746 | 0 | size_t _required = (tsize) * (cnt); \ |
747 | 0 | /* We cannot know the padding, it is lost. */ \ |
748 | 0 | _tail->remaining += _required; }) \ |
749 | | |
750 | | #define libdw_typed_unalloc(dbg, type) \ |
751 | 0 | libdw_unalloc (dbg, type, sizeof (type), 1) |
752 | | |
753 | | /* Callback to choose a thread-local memory allocation stack. */ |
754 | | extern struct libdw_memblock *__libdw_alloc_tail (Dwarf* dbg) |
755 | | __nonnull_attribute__ (1); |
756 | | |
757 | | extern struct libdw_memblock *__libdw_thread_tail (Dwarf* dbg) |
758 | | __nonnull_attribute__ (1); |
759 | | |
760 | | /* Callback to allocate more. */ |
761 | | extern void *__libdw_allocate (Dwarf *dbg, size_t minsize, size_t align) |
762 | | __attribute__ ((__malloc__)) __nonnull_attribute__ (1); |
763 | | |
764 | | /* Default OOM handler. */ |
765 | | extern void __libdw_oom (void) __attribute ((noreturn)) attribute_hidden; |
766 | | |
767 | | /* Read next unit (or v4 debug type) and return next offset. Doesn't |
768 | | create an actual Dwarf_CU just provides necessary header fields. */ |
769 | | extern int |
770 | | internal_function |
771 | | __libdw_next_unit (Dwarf *dbg, bool v4_debug_types, Dwarf_Off off, |
772 | | Dwarf_Off *next_off, size_t *header_sizep, |
773 | | Dwarf_Half *versionp, uint8_t *unit_typep, |
774 | | Dwarf_Off *abbrev_offsetp, uint8_t *address_sizep, |
775 | | uint8_t *offset_sizep, uint64_t *unit_id8p, |
776 | | Dwarf_Off *subdie_offsetp) |
777 | | __nonnull_attribute__ (4) internal_function; |
778 | | |
779 | | /* Allocate the internal data for a unit not seen before. */ |
780 | | extern struct Dwarf_CU *__libdw_intern_next_unit (Dwarf *dbg, bool debug_types) |
781 | | __nonnull_attribute__ (1) internal_function; |
782 | | |
783 | | /* Find CU for given offset. */ |
784 | | extern struct Dwarf_CU *__libdw_findcu (Dwarf *dbg, Dwarf_Off offset, bool tu) |
785 | | __nonnull_attribute__ (1) internal_function; |
786 | | |
787 | | /* Find CU for given DIE address. */ |
788 | | extern struct Dwarf_CU *__libdw_findcu_addr (Dwarf *dbg, void *addr) |
789 | | __nonnull_attribute__ (1) internal_function; |
790 | | |
791 | | /* Find split Dwarf for given DIE address. */ |
792 | | extern struct Dwarf *__libdw_find_split_dbg_addr (Dwarf *dbg, void *addr) |
793 | | __nonnull_attribute__ (1) internal_function; |
794 | | |
795 | | /* Find the split (or skeleton) unit. */ |
796 | | extern struct Dwarf_CU *__libdw_find_split_unit (Dwarf_CU *cu) |
797 | | internal_function; |
798 | | |
799 | | /* Find a unit in a DWARF package file for __libdw_intern_next_unit. */ |
800 | | extern int __libdw_dwp_find_unit (Dwarf *dbg, bool debug_types, Dwarf_Off off, |
801 | | uint16_t version, uint8_t unit_type, |
802 | | uint64_t unit_id8, uint32_t *unit_rowp, |
803 | | Dwarf_Off *abbrev_offsetp) |
804 | | __nonnull_attribute__ (1, 7, 8) internal_function; |
805 | | |
806 | | /* Find the compilation unit in a DWARF package file with the given id. */ |
807 | | extern Dwarf_CU *__libdw_dwp_findcu_id (Dwarf *dbg, uint64_t unit_id8) |
808 | | __nonnull_attribute__ (1) internal_function; |
809 | | |
810 | | /* Get abbreviation with given code. */ |
811 | | extern Dwarf_Abbrev *__libdw_findabbrev (struct Dwarf_CU *cu, |
812 | | unsigned int code) |
813 | | __nonnull_attribute__ (1) internal_function; |
814 | | |
815 | | /* Get abbreviation at given offset. */ |
816 | | extern Dwarf_Abbrev *__libdw_getabbrev (Dwarf *dbg, struct Dwarf_CU *cu, |
817 | | Dwarf_Off offset, size_t *lengthp) |
818 | | __nonnull_attribute__ (1) internal_function; |
819 | | |
820 | | /* Get abbreviation of given DIE, and optionally set *READP to the DIE memory |
821 | | just past the abbreviation code. */ |
822 | | static inline Dwarf_Abbrev * |
823 | | __nonnull_attribute__ (1) |
824 | | __libdw_dieabbrev (Dwarf_Die *die, const unsigned char **readp) |
825 | 0 | { |
826 | 0 | if (unlikely (die->cu == NULL)) |
827 | 0 | { |
828 | 0 | die->abbrev = DWARF_END_ABBREV; |
829 | 0 | return DWARF_END_ABBREV; |
830 | 0 | } |
831 | | |
832 | 0 | rwlock_wrlock (die->cu->abbrev_lock); |
833 | | |
834 | | /* Do we need to get the abbreviation, or need to read after the code? */ |
835 | 0 | if (die->abbrev == NULL || readp != NULL) |
836 | 0 | { |
837 | | /* Get the abbreviation code. */ |
838 | 0 | unsigned int code; |
839 | 0 | const unsigned char *addr = die->addr; |
840 | |
|
841 | 0 | if (addr >= (const unsigned char *) die->cu->endp) |
842 | 0 | { |
843 | 0 | die->abbrev = DWARF_END_ABBREV; |
844 | 0 | rwlock_unlock (die->cu->abbrev_lock); |
845 | 0 | return DWARF_END_ABBREV; |
846 | 0 | } |
847 | | |
848 | 0 | get_uleb128 (code, addr, die->cu->endp); |
849 | 0 | if (readp != NULL) |
850 | 0 | *readp = addr; |
851 | | |
852 | | /* Find the abbreviation. */ |
853 | 0 | if (die->abbrev == NULL) |
854 | 0 | die->abbrev = __libdw_findabbrev (die->cu, code); |
855 | 0 | } |
856 | | |
857 | 0 | Dwarf_Abbrev *result = die->abbrev; |
858 | 0 | rwlock_unlock (die->cu->abbrev_lock); |
859 | |
|
860 | 0 | return result; |
861 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_end.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_error.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_module.c:__libdw_dieabbrev Unexecuted instantiation: offline.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_dieabbrev Unexecuted instantiation: find-debuginfo.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_dieabbrev Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_dieabbrev Unexecuted instantiation: open.c:__libdw_dieabbrev Unexecuted instantiation: image-header.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_frame.c:__libdw_dieabbrev Unexecuted instantiation: frame_unwind.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_frame_pc.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_frame_regs.c:__libdw_dieabbrev Unexecuted instantiation: gzip.c:__libdw_dieabbrev Unexecuted instantiation: dwflst_process_tracker.c:__libdw_dieabbrev Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_dieabbrev Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_dieabbrev Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_dieabbrev Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_dieabbrev Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_dieabbrev Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_dieabbrev Unexecuted instantiation: mips_retval.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_begin_elf.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_end.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_tag.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_error.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_attr.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_child.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_formudata.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_formref_die.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_siblingof.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_diecu.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_hasattr.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_bytesize.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_bitsize.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_formflag.c:__libdw_dieabbrev Unexecuted instantiation: libdw_findcu.c:__libdw_dieabbrev Unexecuted instantiation: libdw_form.c:__libdw_dieabbrev Unexecuted instantiation: libdw_alloc.c:__libdw_dieabbrev Unexecuted instantiation: frame-cache.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_frame_register.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_cfi_end.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_getalt.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_setalt.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_peel_type.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_dieabbrev Unexecuted instantiation: libdw_find_split_unit.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_report_elf.c:__libdw_dieabbrev Unexecuted instantiation: relocate.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_module_build_id.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_dieabbrev Unexecuted instantiation: linux-proc-maps.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_addrmodule.c:__libdw_dieabbrev Unexecuted instantiation: libdwfl_crc32.c:__libdw_dieabbrev Unexecuted instantiation: elf-from-memory.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_dieabbrev Unexecuted instantiation: linux-pid-attach.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_begin.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_getabbrev.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_nextcu.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_offdie.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_formstring.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_haschildren.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_formsdata.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_formref.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_srclang.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_getlocation.c:__libdw_dieabbrev Unexecuted instantiation: fde.c:__libdw_dieabbrev Unexecuted instantiation: cfi.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_getcfi.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_get_units.c:__libdw_dieabbrev Unexecuted instantiation: segment.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_formaddr.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_lowpc.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_ranges.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_formblock.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_next_cfi.c:__libdw_dieabbrev Unexecuted instantiation: cie.c:__libdw_dieabbrev Unexecuted instantiation: dwarf_highpc.c:__libdw_dieabbrev Unexecuted instantiation: core-file.c:__libdw_dieabbrev Unexecuted instantiation: linux-core-attach.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_dieabbrev Unexecuted instantiation: link_map.c:__libdw_dieabbrev Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_dieabbrev Unexecuted instantiation: derelocate.c:__libdw_dieabbrev |
862 | | |
863 | | /* Helper functions for form handling. */ |
864 | | extern size_t __libdw_form_val_compute_len (struct Dwarf_CU *cu, |
865 | | unsigned int form, |
866 | | const unsigned char *valp) |
867 | | __nonnull_attribute__ (1, 3) internal_function; |
868 | | |
869 | | /* Find the length of a form attribute in DIE/info data. */ |
870 | | static inline size_t |
871 | | __nonnull_attribute__ (1, 3) |
872 | | __libdw_form_val_len (struct Dwarf_CU *cu, unsigned int form, |
873 | | const unsigned char *valp) |
874 | 0 | { |
875 | | /* Small lookup table of forms with fixed lengths. Absent indexes are |
876 | | initialized 0, so any truly desired 0 is set to 0x80 and masked. */ |
877 | 0 | static const uint8_t form_lengths[] = |
878 | 0 | { |
879 | 0 | [DW_FORM_flag_present] = 0x80, |
880 | 0 | [DW_FORM_implicit_const] = 0x80, /* Value is in abbrev, not in info. */ |
881 | |
|
882 | 0 | [DW_FORM_flag] = 1, |
883 | 0 | [DW_FORM_data1] = 1, [DW_FORM_ref1] = 1, |
884 | 0 | [DW_FORM_addrx1] = 1, [DW_FORM_strx1] = 1, |
885 | |
|
886 | 0 | [DW_FORM_data2] = 2, [DW_FORM_ref2] = 2, |
887 | 0 | [DW_FORM_addrx2] = 2, [DW_FORM_strx2] = 2, |
888 | |
|
889 | 0 | [DW_FORM_addrx3] = 3, [DW_FORM_strx3] = 3, |
890 | |
|
891 | 0 | [DW_FORM_data4] = 4, [DW_FORM_ref4] = 4, [DW_FORM_ref_sup4] = 4, |
892 | 0 | [DW_FORM_addrx4] = 4, [DW_FORM_strx4] = 4, |
893 | |
|
894 | 0 | [DW_FORM_ref_sig8] = 8, |
895 | 0 | [DW_FORM_data8] = 8, [DW_FORM_ref8] = 8, [DW_FORM_ref_sup8] = 8, |
896 | |
|
897 | 0 | [DW_FORM_data16] = 16, |
898 | 0 | }; |
899 | | |
900 | | /* Return immediately for forms with fixed lengths. */ |
901 | 0 | if (form < sizeof form_lengths / sizeof form_lengths[0]) |
902 | 0 | { |
903 | 0 | uint8_t len = form_lengths[form]; |
904 | 0 | if (len != 0) |
905 | 0 | { |
906 | 0 | const unsigned char *endp = cu->endp; |
907 | 0 | len &= 0x7f; /* Mask to allow 0x80 -> 0. */ |
908 | 0 | if (unlikely (len > (size_t) (endp - valp))) |
909 | 0 | { |
910 | 0 | __libdw_seterrno (DWARF_E_INVALID_DWARF); |
911 | 0 | return -1; |
912 | 0 | } |
913 | 0 | return len; |
914 | 0 | } |
915 | 0 | } |
916 | | |
917 | | /* Other forms require some computation. */ |
918 | 0 | return __libdw_form_val_compute_len (cu, form, valp); |
919 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_form_val_len Unexecuted instantiation: dwfl_end.c:__libdw_form_val_len Unexecuted instantiation: dwfl_error.c:__libdw_form_val_len Unexecuted instantiation: dwfl_module.c:__libdw_form_val_len Unexecuted instantiation: offline.c:__libdw_form_val_len Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_form_val_len Unexecuted instantiation: find-debuginfo.c:__libdw_form_val_len Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_form_val_len Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_form_val_len Unexecuted instantiation: open.c:__libdw_form_val_len Unexecuted instantiation: image-header.c:__libdw_form_val_len Unexecuted instantiation: dwfl_frame.c:__libdw_form_val_len Unexecuted instantiation: frame_unwind.c:__libdw_form_val_len Unexecuted instantiation: dwfl_frame_pc.c:__libdw_form_val_len Unexecuted instantiation: dwfl_frame_regs.c:__libdw_form_val_len Unexecuted instantiation: gzip.c:__libdw_form_val_len Unexecuted instantiation: dwflst_process_tracker.c:__libdw_form_val_len Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_form_val_len Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_form_val_len Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_form_val_len Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_form_val_len Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_form_val_len Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_form_val_len Unexecuted instantiation: mips_retval.c:__libdw_form_val_len Unexecuted instantiation: dwarf_begin_elf.c:__libdw_form_val_len Unexecuted instantiation: dwarf_end.c:__libdw_form_val_len Unexecuted instantiation: dwarf_tag.c:__libdw_form_val_len Unexecuted instantiation: dwarf_error.c:__libdw_form_val_len Unexecuted instantiation: dwarf_attr.c:__libdw_form_val_len Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_form_val_len Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_form_val_len Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_form_val_len Unexecuted instantiation: dwarf_child.c:__libdw_form_val_len Unexecuted instantiation: dwarf_formudata.c:__libdw_form_val_len Unexecuted instantiation: dwarf_formref_die.c:__libdw_form_val_len Unexecuted instantiation: dwarf_siblingof.c:__libdw_form_val_len Unexecuted instantiation: dwarf_diecu.c:__libdw_form_val_len Unexecuted instantiation: dwarf_hasattr.c:__libdw_form_val_len Unexecuted instantiation: dwarf_bytesize.c:__libdw_form_val_len Unexecuted instantiation: dwarf_bitsize.c:__libdw_form_val_len Unexecuted instantiation: dwarf_formflag.c:__libdw_form_val_len Unexecuted instantiation: libdw_findcu.c:__libdw_form_val_len Unexecuted instantiation: libdw_form.c:__libdw_form_val_len Unexecuted instantiation: libdw_alloc.c:__libdw_form_val_len Unexecuted instantiation: frame-cache.c:__libdw_form_val_len Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_form_val_len Unexecuted instantiation: dwarf_frame_register.c:__libdw_form_val_len Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_form_val_len Unexecuted instantiation: dwarf_cfi_end.c:__libdw_form_val_len Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_form_val_len Unexecuted instantiation: dwarf_getalt.c:__libdw_form_val_len Unexecuted instantiation: dwarf_setalt.c:__libdw_form_val_len Unexecuted instantiation: dwarf_peel_type.c:__libdw_form_val_len Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_form_val_len Unexecuted instantiation: libdw_find_split_unit.c:__libdw_form_val_len Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_form_val_len Unexecuted instantiation: dwfl_report_elf.c:__libdw_form_val_len Unexecuted instantiation: relocate.c:__libdw_form_val_len Unexecuted instantiation: dwfl_module_build_id.c:__libdw_form_val_len Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_form_val_len Unexecuted instantiation: linux-proc-maps.c:__libdw_form_val_len Unexecuted instantiation: dwfl_addrmodule.c:__libdw_form_val_len Unexecuted instantiation: libdwfl_crc32.c:__libdw_form_val_len Unexecuted instantiation: elf-from-memory.c:__libdw_form_val_len Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_form_val_len Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_form_val_len Unexecuted instantiation: linux-pid-attach.c:__libdw_form_val_len Unexecuted instantiation: dwarf_begin.c:__libdw_form_val_len Unexecuted instantiation: dwarf_getabbrev.c:__libdw_form_val_len Unexecuted instantiation: dwarf_nextcu.c:__libdw_form_val_len Unexecuted instantiation: dwarf_offdie.c:__libdw_form_val_len Unexecuted instantiation: dwarf_formstring.c:__libdw_form_val_len Unexecuted instantiation: dwarf_haschildren.c:__libdw_form_val_len Unexecuted instantiation: dwarf_formsdata.c:__libdw_form_val_len Unexecuted instantiation: dwarf_formref.c:__libdw_form_val_len Unexecuted instantiation: dwarf_srclang.c:__libdw_form_val_len Unexecuted instantiation: dwarf_getlocation.c:__libdw_form_val_len Unexecuted instantiation: fde.c:__libdw_form_val_len Unexecuted instantiation: cfi.c:__libdw_form_val_len Unexecuted instantiation: dwarf_getcfi.c:__libdw_form_val_len Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_form_val_len Unexecuted instantiation: dwarf_get_units.c:__libdw_form_val_len Unexecuted instantiation: segment.c:__libdw_form_val_len Unexecuted instantiation: dwarf_formaddr.c:__libdw_form_val_len Unexecuted instantiation: dwarf_lowpc.c:__libdw_form_val_len Unexecuted instantiation: dwarf_ranges.c:__libdw_form_val_len Unexecuted instantiation: dwarf_formblock.c:__libdw_form_val_len Unexecuted instantiation: dwarf_next_cfi.c:__libdw_form_val_len Unexecuted instantiation: cie.c:__libdw_form_val_len Unexecuted instantiation: dwarf_highpc.c:__libdw_form_val_len Unexecuted instantiation: core-file.c:__libdw_form_val_len Unexecuted instantiation: linux-core-attach.c:__libdw_form_val_len Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_form_val_len Unexecuted instantiation: link_map.c:__libdw_form_val_len Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_form_val_len Unexecuted instantiation: derelocate.c:__libdw_form_val_len |
920 | | |
921 | | /* Helper function for DW_FORM_ref* handling. */ |
922 | | extern int __libdw_formref (Dwarf_Attribute *attr, Dwarf_Off *return_offset) |
923 | | __nonnull_attribute__ (1, 2) internal_function; |
924 | | |
925 | | |
926 | | /* Helper function to locate attribute. */ |
927 | | extern unsigned char *__libdw_find_attr (Dwarf_Die *die, |
928 | | unsigned int search_name, |
929 | | unsigned int *codep, |
930 | | unsigned int *formp) |
931 | | __nonnull_attribute__ (1) internal_function; |
932 | | |
933 | | /* Helper function to access integer attribute. */ |
934 | | extern int __libdw_attr_intval (Dwarf_Die *die, int *valp, int attval) |
935 | | __nonnull_attribute__ (1, 2) internal_function; |
936 | | |
937 | | /* Helper function to walk scopes. */ |
938 | | struct Dwarf_Die_Chain |
939 | | { |
940 | | Dwarf_Die die; |
941 | | struct Dwarf_Die_Chain *parent; |
942 | | bool prune; /* The PREVISIT function can set this. */ |
943 | | }; |
944 | | extern int __libdw_visit_scopes (unsigned int depth, |
945 | | struct Dwarf_Die_Chain *root, |
946 | | struct Dwarf_Die_Chain *imports, |
947 | | int (*previsit) (unsigned int depth, |
948 | | struct Dwarf_Die_Chain *, |
949 | | void *arg), |
950 | | int (*postvisit) (unsigned int depth, |
951 | | struct Dwarf_Die_Chain *, |
952 | | void *arg), |
953 | | void *arg) |
954 | | __nonnull_attribute__ (2, 4) internal_function; |
955 | | |
956 | | /* Parse a DWARF Dwarf_Block into an array of Dwarf_Op's, and cache the |
957 | | result (via tsearch). The owner of CACHE (typically a Dwarf_CU or |
958 | | Dwarf_CFI_s) must hold a lock when calling this function. */ |
959 | | extern int __libdw_intern_expression (Dwarf *dbg, |
960 | | bool other_byte_order, |
961 | | unsigned int address_size, |
962 | | unsigned int ref_size, |
963 | | search_tree *cache, |
964 | | const Dwarf_Block *block, |
965 | | bool cfap, bool valuep, |
966 | | Dwarf_Op **llbuf, size_t *listlen, |
967 | | int sec_index) |
968 | | __nonnull_attribute__ (5, 6, 9, 10) internal_function; |
969 | | |
970 | | extern Dwarf_Die *__libdw_offdie (Dwarf *dbg, Dwarf_Off offset, |
971 | | Dwarf_Die *result, bool debug_types) |
972 | | internal_function; |
973 | | |
974 | | |
975 | | /* Return error code of last failing function call. This value is kept |
976 | | separately for each thread. */ |
977 | | extern int __dwarf_errno_internal (void); |
978 | | |
979 | | |
980 | | /* Reader hooks. */ |
981 | | |
982 | | /* Relocation hooks return -1 on error (in that case the error code |
983 | | must already have been set), 0 if there is no relocation and 1 if a |
984 | | relocation was present.*/ |
985 | | |
986 | | static inline int |
987 | | __libdw_relocate_address (Dwarf *dbg __attribute__ ((unused)), |
988 | | int sec_index __attribute__ ((unused)), |
989 | | const void *addr __attribute__ ((unused)), |
990 | | int width __attribute__ ((unused)), |
991 | | Dwarf_Addr *val __attribute__ ((unused))) |
992 | 0 | { |
993 | 0 | return 0; |
994 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_relocate_address Unexecuted instantiation: dwfl_end.c:__libdw_relocate_address Unexecuted instantiation: dwfl_error.c:__libdw_relocate_address Unexecuted instantiation: dwfl_module.c:__libdw_relocate_address Unexecuted instantiation: offline.c:__libdw_relocate_address Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_relocate_address Unexecuted instantiation: find-debuginfo.c:__libdw_relocate_address Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_relocate_address Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_relocate_address Unexecuted instantiation: open.c:__libdw_relocate_address Unexecuted instantiation: image-header.c:__libdw_relocate_address Unexecuted instantiation: dwfl_frame.c:__libdw_relocate_address Unexecuted instantiation: frame_unwind.c:__libdw_relocate_address Unexecuted instantiation: dwfl_frame_pc.c:__libdw_relocate_address Unexecuted instantiation: dwfl_frame_regs.c:__libdw_relocate_address Unexecuted instantiation: gzip.c:__libdw_relocate_address Unexecuted instantiation: dwflst_process_tracker.c:__libdw_relocate_address Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_relocate_address Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_relocate_address Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_relocate_address Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_relocate_address Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_relocate_address Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_relocate_address Unexecuted instantiation: mips_retval.c:__libdw_relocate_address Unexecuted instantiation: dwarf_begin_elf.c:__libdw_relocate_address Unexecuted instantiation: dwarf_end.c:__libdw_relocate_address Unexecuted instantiation: dwarf_tag.c:__libdw_relocate_address Unexecuted instantiation: dwarf_error.c:__libdw_relocate_address Unexecuted instantiation: dwarf_attr.c:__libdw_relocate_address Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_relocate_address Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_relocate_address Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_relocate_address Unexecuted instantiation: dwarf_child.c:__libdw_relocate_address Unexecuted instantiation: dwarf_formudata.c:__libdw_relocate_address Unexecuted instantiation: dwarf_formref_die.c:__libdw_relocate_address Unexecuted instantiation: dwarf_siblingof.c:__libdw_relocate_address Unexecuted instantiation: dwarf_diecu.c:__libdw_relocate_address Unexecuted instantiation: dwarf_hasattr.c:__libdw_relocate_address Unexecuted instantiation: dwarf_bytesize.c:__libdw_relocate_address Unexecuted instantiation: dwarf_bitsize.c:__libdw_relocate_address Unexecuted instantiation: dwarf_formflag.c:__libdw_relocate_address Unexecuted instantiation: libdw_findcu.c:__libdw_relocate_address Unexecuted instantiation: libdw_form.c:__libdw_relocate_address Unexecuted instantiation: libdw_alloc.c:__libdw_relocate_address Unexecuted instantiation: frame-cache.c:__libdw_relocate_address Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_relocate_address Unexecuted instantiation: dwarf_frame_register.c:__libdw_relocate_address Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_relocate_address Unexecuted instantiation: dwarf_cfi_end.c:__libdw_relocate_address Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_relocate_address Unexecuted instantiation: dwarf_getalt.c:__libdw_relocate_address Unexecuted instantiation: dwarf_setalt.c:__libdw_relocate_address Unexecuted instantiation: dwarf_peel_type.c:__libdw_relocate_address Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_relocate_address Unexecuted instantiation: libdw_find_split_unit.c:__libdw_relocate_address Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_relocate_address Unexecuted instantiation: dwfl_report_elf.c:__libdw_relocate_address Unexecuted instantiation: relocate.c:__libdw_relocate_address Unexecuted instantiation: dwfl_module_build_id.c:__libdw_relocate_address Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_relocate_address Unexecuted instantiation: linux-proc-maps.c:__libdw_relocate_address Unexecuted instantiation: dwfl_addrmodule.c:__libdw_relocate_address Unexecuted instantiation: libdwfl_crc32.c:__libdw_relocate_address Unexecuted instantiation: elf-from-memory.c:__libdw_relocate_address Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_relocate_address Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_relocate_address Unexecuted instantiation: linux-pid-attach.c:__libdw_relocate_address Unexecuted instantiation: dwarf_begin.c:__libdw_relocate_address Unexecuted instantiation: dwarf_getabbrev.c:__libdw_relocate_address Unexecuted instantiation: dwarf_nextcu.c:__libdw_relocate_address Unexecuted instantiation: dwarf_offdie.c:__libdw_relocate_address Unexecuted instantiation: dwarf_formstring.c:__libdw_relocate_address Unexecuted instantiation: dwarf_haschildren.c:__libdw_relocate_address Unexecuted instantiation: dwarf_formsdata.c:__libdw_relocate_address Unexecuted instantiation: dwarf_formref.c:__libdw_relocate_address Unexecuted instantiation: dwarf_srclang.c:__libdw_relocate_address Unexecuted instantiation: dwarf_getlocation.c:__libdw_relocate_address Unexecuted instantiation: fde.c:__libdw_relocate_address Unexecuted instantiation: cfi.c:__libdw_relocate_address Unexecuted instantiation: dwarf_getcfi.c:__libdw_relocate_address Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_relocate_address Unexecuted instantiation: dwarf_get_units.c:__libdw_relocate_address Unexecuted instantiation: segment.c:__libdw_relocate_address Unexecuted instantiation: dwarf_formaddr.c:__libdw_relocate_address Unexecuted instantiation: dwarf_lowpc.c:__libdw_relocate_address Unexecuted instantiation: dwarf_ranges.c:__libdw_relocate_address Unexecuted instantiation: dwarf_formblock.c:__libdw_relocate_address Unexecuted instantiation: dwarf_next_cfi.c:__libdw_relocate_address Unexecuted instantiation: cie.c:__libdw_relocate_address Unexecuted instantiation: dwarf_highpc.c:__libdw_relocate_address Unexecuted instantiation: core-file.c:__libdw_relocate_address Unexecuted instantiation: linux-core-attach.c:__libdw_relocate_address Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_relocate_address Unexecuted instantiation: link_map.c:__libdw_relocate_address Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_relocate_address Unexecuted instantiation: derelocate.c:__libdw_relocate_address |
995 | | |
996 | | static inline int |
997 | | __libdw_relocate_offset (Dwarf *dbg __attribute__ ((unused)), |
998 | | int sec_index __attribute__ ((unused)), |
999 | | const void *addr __attribute__ ((unused)), |
1000 | | int width __attribute__ ((unused)), |
1001 | | Dwarf_Off *val __attribute__ ((unused))) |
1002 | 0 | { |
1003 | 0 | return 0; |
1004 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_end.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_error.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_module.c:__libdw_relocate_offset Unexecuted instantiation: offline.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_relocate_offset Unexecuted instantiation: find-debuginfo.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_relocate_offset Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_relocate_offset Unexecuted instantiation: open.c:__libdw_relocate_offset Unexecuted instantiation: image-header.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_frame.c:__libdw_relocate_offset Unexecuted instantiation: frame_unwind.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_frame_pc.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_frame_regs.c:__libdw_relocate_offset Unexecuted instantiation: gzip.c:__libdw_relocate_offset Unexecuted instantiation: dwflst_process_tracker.c:__libdw_relocate_offset Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_relocate_offset Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_relocate_offset Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_relocate_offset Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_relocate_offset Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_relocate_offset Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_relocate_offset Unexecuted instantiation: mips_retval.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_begin_elf.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_end.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_tag.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_error.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_attr.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_child.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_formudata.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_formref_die.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_siblingof.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_diecu.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_hasattr.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_bytesize.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_bitsize.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_formflag.c:__libdw_relocate_offset Unexecuted instantiation: libdw_findcu.c:__libdw_relocate_offset Unexecuted instantiation: libdw_form.c:__libdw_relocate_offset Unexecuted instantiation: libdw_alloc.c:__libdw_relocate_offset Unexecuted instantiation: frame-cache.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_frame_register.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_cfi_end.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_getalt.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_setalt.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_peel_type.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_relocate_offset Unexecuted instantiation: libdw_find_split_unit.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_report_elf.c:__libdw_relocate_offset Unexecuted instantiation: relocate.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_module_build_id.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_relocate_offset Unexecuted instantiation: linux-proc-maps.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_addrmodule.c:__libdw_relocate_offset Unexecuted instantiation: libdwfl_crc32.c:__libdw_relocate_offset Unexecuted instantiation: elf-from-memory.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_relocate_offset Unexecuted instantiation: linux-pid-attach.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_begin.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_getabbrev.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_nextcu.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_offdie.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_formstring.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_haschildren.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_formsdata.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_formref.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_srclang.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_getlocation.c:__libdw_relocate_offset Unexecuted instantiation: fde.c:__libdw_relocate_offset Unexecuted instantiation: cfi.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_getcfi.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_get_units.c:__libdw_relocate_offset Unexecuted instantiation: segment.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_formaddr.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_lowpc.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_ranges.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_formblock.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_next_cfi.c:__libdw_relocate_offset Unexecuted instantiation: cie.c:__libdw_relocate_offset Unexecuted instantiation: dwarf_highpc.c:__libdw_relocate_offset Unexecuted instantiation: core-file.c:__libdw_relocate_offset Unexecuted instantiation: linux-core-attach.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_relocate_offset Unexecuted instantiation: link_map.c:__libdw_relocate_offset Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_relocate_offset Unexecuted instantiation: derelocate.c:__libdw_relocate_offset |
1005 | | |
1006 | | static inline Elf_Data * |
1007 | | __libdw_checked_get_data (Dwarf *dbg, int sec_index) |
1008 | 0 | { |
1009 | 0 | Elf_Data *data = dbg->sectiondata[sec_index]; |
1010 | 0 | if (unlikely (data == NULL) |
1011 | 0 | || unlikely (data->d_buf == NULL)) |
1012 | 0 | { |
1013 | 0 | __libdw_seterrno (DWARF_E_INVALID_DWARF); |
1014 | 0 | return NULL; |
1015 | 0 | } |
1016 | 0 | return data; |
1017 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_end.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_error.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_module.c:__libdw_checked_get_data Unexecuted instantiation: offline.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_checked_get_data Unexecuted instantiation: find-debuginfo.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_checked_get_data Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_checked_get_data Unexecuted instantiation: open.c:__libdw_checked_get_data Unexecuted instantiation: image-header.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_frame.c:__libdw_checked_get_data Unexecuted instantiation: frame_unwind.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_frame_pc.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_frame_regs.c:__libdw_checked_get_data Unexecuted instantiation: gzip.c:__libdw_checked_get_data Unexecuted instantiation: dwflst_process_tracker.c:__libdw_checked_get_data Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_checked_get_data Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_checked_get_data Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_checked_get_data Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_checked_get_data Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_checked_get_data Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_checked_get_data Unexecuted instantiation: mips_retval.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_begin_elf.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_end.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_tag.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_error.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_attr.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_child.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_formudata.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_formref_die.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_siblingof.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_diecu.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_hasattr.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_bytesize.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_bitsize.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_formflag.c:__libdw_checked_get_data Unexecuted instantiation: libdw_findcu.c:__libdw_checked_get_data Unexecuted instantiation: libdw_form.c:__libdw_checked_get_data Unexecuted instantiation: libdw_alloc.c:__libdw_checked_get_data Unexecuted instantiation: frame-cache.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_frame_register.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_cfi_end.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_getalt.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_setalt.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_peel_type.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_checked_get_data Unexecuted instantiation: libdw_find_split_unit.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_report_elf.c:__libdw_checked_get_data Unexecuted instantiation: relocate.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_module_build_id.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_checked_get_data Unexecuted instantiation: linux-proc-maps.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_addrmodule.c:__libdw_checked_get_data Unexecuted instantiation: libdwfl_crc32.c:__libdw_checked_get_data Unexecuted instantiation: elf-from-memory.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_checked_get_data Unexecuted instantiation: linux-pid-attach.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_begin.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_getabbrev.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_nextcu.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_offdie.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_formstring.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_haschildren.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_formsdata.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_formref.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_srclang.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_getlocation.c:__libdw_checked_get_data Unexecuted instantiation: fde.c:__libdw_checked_get_data Unexecuted instantiation: cfi.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_getcfi.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_get_units.c:__libdw_checked_get_data Unexecuted instantiation: segment.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_formaddr.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_lowpc.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_ranges.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_formblock.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_next_cfi.c:__libdw_checked_get_data Unexecuted instantiation: cie.c:__libdw_checked_get_data Unexecuted instantiation: dwarf_highpc.c:__libdw_checked_get_data Unexecuted instantiation: core-file.c:__libdw_checked_get_data Unexecuted instantiation: linux-core-attach.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_checked_get_data Unexecuted instantiation: link_map.c:__libdw_checked_get_data Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_checked_get_data Unexecuted instantiation: derelocate.c:__libdw_checked_get_data |
1018 | | |
1019 | | static inline int |
1020 | | __libdw_offset_in_section (Dwarf *dbg, int sec_index, |
1021 | | Dwarf_Off offset, size_t size) |
1022 | 0 | { |
1023 | 0 | Elf_Data *data = __libdw_checked_get_data (dbg, sec_index); |
1024 | 0 | if (data == NULL) |
1025 | 0 | return -1; |
1026 | 0 | if (unlikely (offset > data->d_size) |
1027 | 0 | || unlikely (data->d_size < size) |
1028 | 0 | || unlikely (offset > data->d_size - size)) |
1029 | 0 | { |
1030 | 0 | __libdw_seterrno (DWARF_E_INVALID_OFFSET); |
1031 | 0 | return -1; |
1032 | 0 | } |
1033 | | |
1034 | 0 | return 0; |
1035 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_end.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_error.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_module.c:__libdw_offset_in_section Unexecuted instantiation: offline.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_offset_in_section Unexecuted instantiation: find-debuginfo.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_offset_in_section Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_offset_in_section Unexecuted instantiation: open.c:__libdw_offset_in_section Unexecuted instantiation: image-header.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_frame.c:__libdw_offset_in_section Unexecuted instantiation: frame_unwind.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_frame_pc.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_frame_regs.c:__libdw_offset_in_section Unexecuted instantiation: gzip.c:__libdw_offset_in_section Unexecuted instantiation: dwflst_process_tracker.c:__libdw_offset_in_section Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_offset_in_section Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_offset_in_section Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_offset_in_section Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_offset_in_section Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_offset_in_section Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_offset_in_section Unexecuted instantiation: mips_retval.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_begin_elf.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_end.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_tag.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_error.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_attr.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_child.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_formudata.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_formref_die.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_siblingof.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_diecu.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_hasattr.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_bytesize.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_bitsize.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_formflag.c:__libdw_offset_in_section Unexecuted instantiation: libdw_findcu.c:__libdw_offset_in_section Unexecuted instantiation: libdw_form.c:__libdw_offset_in_section Unexecuted instantiation: libdw_alloc.c:__libdw_offset_in_section Unexecuted instantiation: frame-cache.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_frame_register.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_cfi_end.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_getalt.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_setalt.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_peel_type.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_offset_in_section Unexecuted instantiation: libdw_find_split_unit.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_report_elf.c:__libdw_offset_in_section Unexecuted instantiation: relocate.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_module_build_id.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_offset_in_section Unexecuted instantiation: linux-proc-maps.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_addrmodule.c:__libdw_offset_in_section Unexecuted instantiation: libdwfl_crc32.c:__libdw_offset_in_section Unexecuted instantiation: elf-from-memory.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_offset_in_section Unexecuted instantiation: linux-pid-attach.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_begin.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_getabbrev.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_nextcu.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_offdie.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_formstring.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_haschildren.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_formsdata.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_formref.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_srclang.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_getlocation.c:__libdw_offset_in_section Unexecuted instantiation: fde.c:__libdw_offset_in_section Unexecuted instantiation: cfi.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_getcfi.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_get_units.c:__libdw_offset_in_section Unexecuted instantiation: segment.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_formaddr.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_lowpc.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_ranges.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_formblock.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_next_cfi.c:__libdw_offset_in_section Unexecuted instantiation: cie.c:__libdw_offset_in_section Unexecuted instantiation: dwarf_highpc.c:__libdw_offset_in_section Unexecuted instantiation: core-file.c:__libdw_offset_in_section Unexecuted instantiation: linux-core-attach.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_offset_in_section Unexecuted instantiation: link_map.c:__libdw_offset_in_section Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_offset_in_section Unexecuted instantiation: derelocate.c:__libdw_offset_in_section |
1036 | | |
1037 | | static inline bool |
1038 | | __libdw_in_section (Dwarf *dbg, int sec_index, |
1039 | | const void *addr, size_t size) |
1040 | 0 | { |
1041 | 0 | Elf_Data *data = __libdw_checked_get_data (dbg, sec_index); |
1042 | 0 | if (data == NULL) |
1043 | 0 | return false; |
1044 | 0 | if (unlikely (addr < data->d_buf) |
1045 | 0 | || unlikely (data->d_size < size) |
1046 | 0 | || unlikely ((size_t)(addr - data->d_buf) > data->d_size - size)) |
1047 | 0 | { |
1048 | 0 | __libdw_seterrno (DWARF_E_INVALID_OFFSET); |
1049 | 0 | return false; |
1050 | 0 | } |
1051 | | |
1052 | 0 | return true; |
1053 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_in_section Unexecuted instantiation: dwfl_end.c:__libdw_in_section Unexecuted instantiation: dwfl_error.c:__libdw_in_section Unexecuted instantiation: dwfl_module.c:__libdw_in_section Unexecuted instantiation: offline.c:__libdw_in_section Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_in_section Unexecuted instantiation: find-debuginfo.c:__libdw_in_section Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_in_section Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_in_section Unexecuted instantiation: open.c:__libdw_in_section Unexecuted instantiation: image-header.c:__libdw_in_section Unexecuted instantiation: dwfl_frame.c:__libdw_in_section Unexecuted instantiation: frame_unwind.c:__libdw_in_section Unexecuted instantiation: dwfl_frame_pc.c:__libdw_in_section Unexecuted instantiation: dwfl_frame_regs.c:__libdw_in_section Unexecuted instantiation: gzip.c:__libdw_in_section Unexecuted instantiation: dwflst_process_tracker.c:__libdw_in_section Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_in_section Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_in_section Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_in_section Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_in_section Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_in_section Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_in_section Unexecuted instantiation: mips_retval.c:__libdw_in_section Unexecuted instantiation: dwarf_begin_elf.c:__libdw_in_section Unexecuted instantiation: dwarf_end.c:__libdw_in_section Unexecuted instantiation: dwarf_tag.c:__libdw_in_section Unexecuted instantiation: dwarf_error.c:__libdw_in_section Unexecuted instantiation: dwarf_attr.c:__libdw_in_section Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_in_section Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_in_section Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_in_section Unexecuted instantiation: dwarf_child.c:__libdw_in_section Unexecuted instantiation: dwarf_formudata.c:__libdw_in_section Unexecuted instantiation: dwarf_formref_die.c:__libdw_in_section Unexecuted instantiation: dwarf_siblingof.c:__libdw_in_section Unexecuted instantiation: dwarf_diecu.c:__libdw_in_section Unexecuted instantiation: dwarf_hasattr.c:__libdw_in_section Unexecuted instantiation: dwarf_bytesize.c:__libdw_in_section Unexecuted instantiation: dwarf_bitsize.c:__libdw_in_section Unexecuted instantiation: dwarf_formflag.c:__libdw_in_section Unexecuted instantiation: libdw_findcu.c:__libdw_in_section Unexecuted instantiation: libdw_form.c:__libdw_in_section Unexecuted instantiation: libdw_alloc.c:__libdw_in_section Unexecuted instantiation: frame-cache.c:__libdw_in_section Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_in_section Unexecuted instantiation: dwarf_frame_register.c:__libdw_in_section Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_in_section Unexecuted instantiation: dwarf_cfi_end.c:__libdw_in_section Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_in_section Unexecuted instantiation: dwarf_getalt.c:__libdw_in_section Unexecuted instantiation: dwarf_setalt.c:__libdw_in_section Unexecuted instantiation: dwarf_peel_type.c:__libdw_in_section Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_in_section Unexecuted instantiation: libdw_find_split_unit.c:__libdw_in_section Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_in_section Unexecuted instantiation: dwfl_report_elf.c:__libdw_in_section Unexecuted instantiation: relocate.c:__libdw_in_section Unexecuted instantiation: dwfl_module_build_id.c:__libdw_in_section Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_in_section Unexecuted instantiation: linux-proc-maps.c:__libdw_in_section Unexecuted instantiation: dwfl_addrmodule.c:__libdw_in_section Unexecuted instantiation: libdwfl_crc32.c:__libdw_in_section Unexecuted instantiation: elf-from-memory.c:__libdw_in_section Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_in_section Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_in_section Unexecuted instantiation: linux-pid-attach.c:__libdw_in_section Unexecuted instantiation: dwarf_begin.c:__libdw_in_section Unexecuted instantiation: dwarf_getabbrev.c:__libdw_in_section Unexecuted instantiation: dwarf_nextcu.c:__libdw_in_section Unexecuted instantiation: dwarf_offdie.c:__libdw_in_section Unexecuted instantiation: dwarf_formstring.c:__libdw_in_section Unexecuted instantiation: dwarf_haschildren.c:__libdw_in_section Unexecuted instantiation: dwarf_formsdata.c:__libdw_in_section Unexecuted instantiation: dwarf_formref.c:__libdw_in_section Unexecuted instantiation: dwarf_srclang.c:__libdw_in_section Unexecuted instantiation: dwarf_getlocation.c:__libdw_in_section Unexecuted instantiation: fde.c:__libdw_in_section Unexecuted instantiation: cfi.c:__libdw_in_section Unexecuted instantiation: dwarf_getcfi.c:__libdw_in_section Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_in_section Unexecuted instantiation: dwarf_get_units.c:__libdw_in_section Unexecuted instantiation: segment.c:__libdw_in_section Unexecuted instantiation: dwarf_formaddr.c:__libdw_in_section Unexecuted instantiation: dwarf_lowpc.c:__libdw_in_section Unexecuted instantiation: dwarf_ranges.c:__libdw_in_section Unexecuted instantiation: dwarf_formblock.c:__libdw_in_section Unexecuted instantiation: dwarf_next_cfi.c:__libdw_in_section Unexecuted instantiation: cie.c:__libdw_in_section Unexecuted instantiation: dwarf_highpc.c:__libdw_in_section Unexecuted instantiation: core-file.c:__libdw_in_section Unexecuted instantiation: linux-core-attach.c:__libdw_in_section Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_in_section Unexecuted instantiation: link_map.c:__libdw_in_section Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_in_section Unexecuted instantiation: derelocate.c:__libdw_in_section |
1054 | | |
1055 | | #define READ_AND_RELOCATE(RELOC_HOOK, VAL) \ |
1056 | 0 | ({ \ |
1057 | 0 | if (!__libdw_in_section (dbg, sec_index, addr, width)) \ |
1058 | 0 | return -1; \ |
1059 | 0 | \ |
1060 | 0 | const unsigned char *orig_addr = addr; \ |
1061 | 0 | if (width == 4) \ |
1062 | 0 | VAL = read_4ubyte_unaligned_inc (dbg, addr); \ |
1063 | 0 | else \ |
1064 | 0 | VAL = read_8ubyte_unaligned_inc (dbg, addr); \ |
1065 | 0 | \ |
1066 | 0 | int status = RELOC_HOOK (dbg, sec_index, orig_addr, width, &VAL); \ |
1067 | 0 | if (status < 0) \ |
1068 | 0 | return status; \ |
1069 | 0 | status > 0; \ |
1070 | 0 | }) |
1071 | | |
1072 | | static inline int |
1073 | | __libdw_read_address_inc (Dwarf *dbg, |
1074 | | int sec_index, const unsigned char **addrp, |
1075 | | int width, Dwarf_Addr *ret) |
1076 | 0 | { |
1077 | 0 | const unsigned char *addr = *addrp; |
1078 | 0 | READ_AND_RELOCATE (__libdw_relocate_address, (*ret)); |
1079 | 0 | *addrp = addr; |
1080 | 0 | return 0; |
1081 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_end.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_error.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_module.c:__libdw_read_address_inc Unexecuted instantiation: offline.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_read_address_inc Unexecuted instantiation: find-debuginfo.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_read_address_inc Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_read_address_inc Unexecuted instantiation: open.c:__libdw_read_address_inc Unexecuted instantiation: image-header.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_frame.c:__libdw_read_address_inc Unexecuted instantiation: frame_unwind.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_frame_pc.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_frame_regs.c:__libdw_read_address_inc Unexecuted instantiation: gzip.c:__libdw_read_address_inc Unexecuted instantiation: dwflst_process_tracker.c:__libdw_read_address_inc Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_read_address_inc Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_read_address_inc Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_read_address_inc Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_read_address_inc Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_read_address_inc Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_read_address_inc Unexecuted instantiation: mips_retval.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_begin_elf.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_end.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_tag.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_error.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_attr.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_child.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_formudata.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_formref_die.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_siblingof.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_diecu.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_hasattr.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_bytesize.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_bitsize.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_formflag.c:__libdw_read_address_inc Unexecuted instantiation: libdw_findcu.c:__libdw_read_address_inc Unexecuted instantiation: libdw_form.c:__libdw_read_address_inc Unexecuted instantiation: libdw_alloc.c:__libdw_read_address_inc Unexecuted instantiation: frame-cache.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_frame_register.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_cfi_end.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_getalt.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_setalt.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_peel_type.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_read_address_inc Unexecuted instantiation: libdw_find_split_unit.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_report_elf.c:__libdw_read_address_inc Unexecuted instantiation: relocate.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_module_build_id.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_read_address_inc Unexecuted instantiation: linux-proc-maps.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_addrmodule.c:__libdw_read_address_inc Unexecuted instantiation: libdwfl_crc32.c:__libdw_read_address_inc Unexecuted instantiation: elf-from-memory.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_read_address_inc Unexecuted instantiation: linux-pid-attach.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_begin.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_getabbrev.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_nextcu.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_offdie.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_formstring.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_haschildren.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_formsdata.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_formref.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_srclang.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_getlocation.c:__libdw_read_address_inc Unexecuted instantiation: fde.c:__libdw_read_address_inc Unexecuted instantiation: cfi.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_getcfi.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_get_units.c:__libdw_read_address_inc Unexecuted instantiation: segment.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_formaddr.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_lowpc.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_ranges.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_formblock.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_next_cfi.c:__libdw_read_address_inc Unexecuted instantiation: cie.c:__libdw_read_address_inc Unexecuted instantiation: dwarf_highpc.c:__libdw_read_address_inc Unexecuted instantiation: core-file.c:__libdw_read_address_inc Unexecuted instantiation: linux-core-attach.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_read_address_inc Unexecuted instantiation: link_map.c:__libdw_read_address_inc Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_read_address_inc Unexecuted instantiation: derelocate.c:__libdw_read_address_inc |
1082 | | |
1083 | | static inline int |
1084 | | __libdw_read_address (Dwarf *dbg, |
1085 | | int sec_index, const unsigned char *addr, |
1086 | | int width, Dwarf_Addr *ret) |
1087 | 0 | { |
1088 | 0 | READ_AND_RELOCATE (__libdw_relocate_address, (*ret)); |
1089 | 0 | return 0; |
1090 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_read_address Unexecuted instantiation: dwfl_end.c:__libdw_read_address Unexecuted instantiation: dwfl_error.c:__libdw_read_address Unexecuted instantiation: dwfl_module.c:__libdw_read_address Unexecuted instantiation: offline.c:__libdw_read_address Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_read_address Unexecuted instantiation: find-debuginfo.c:__libdw_read_address Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_read_address Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_read_address Unexecuted instantiation: open.c:__libdw_read_address Unexecuted instantiation: image-header.c:__libdw_read_address Unexecuted instantiation: dwfl_frame.c:__libdw_read_address Unexecuted instantiation: frame_unwind.c:__libdw_read_address Unexecuted instantiation: dwfl_frame_pc.c:__libdw_read_address Unexecuted instantiation: dwfl_frame_regs.c:__libdw_read_address Unexecuted instantiation: gzip.c:__libdw_read_address Unexecuted instantiation: dwflst_process_tracker.c:__libdw_read_address Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_read_address Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_read_address Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_read_address Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_read_address Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_read_address Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_read_address Unexecuted instantiation: mips_retval.c:__libdw_read_address Unexecuted instantiation: dwarf_begin_elf.c:__libdw_read_address Unexecuted instantiation: dwarf_end.c:__libdw_read_address Unexecuted instantiation: dwarf_tag.c:__libdw_read_address Unexecuted instantiation: dwarf_error.c:__libdw_read_address Unexecuted instantiation: dwarf_attr.c:__libdw_read_address Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_read_address Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_read_address Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_read_address Unexecuted instantiation: dwarf_child.c:__libdw_read_address Unexecuted instantiation: dwarf_formudata.c:__libdw_read_address Unexecuted instantiation: dwarf_formref_die.c:__libdw_read_address Unexecuted instantiation: dwarf_siblingof.c:__libdw_read_address Unexecuted instantiation: dwarf_diecu.c:__libdw_read_address Unexecuted instantiation: dwarf_hasattr.c:__libdw_read_address Unexecuted instantiation: dwarf_bytesize.c:__libdw_read_address Unexecuted instantiation: dwarf_bitsize.c:__libdw_read_address Unexecuted instantiation: dwarf_formflag.c:__libdw_read_address Unexecuted instantiation: libdw_findcu.c:__libdw_read_address Unexecuted instantiation: libdw_form.c:__libdw_read_address Unexecuted instantiation: libdw_alloc.c:__libdw_read_address Unexecuted instantiation: frame-cache.c:__libdw_read_address Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_read_address Unexecuted instantiation: dwarf_frame_register.c:__libdw_read_address Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_read_address Unexecuted instantiation: dwarf_cfi_end.c:__libdw_read_address Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_read_address Unexecuted instantiation: dwarf_getalt.c:__libdw_read_address Unexecuted instantiation: dwarf_setalt.c:__libdw_read_address Unexecuted instantiation: dwarf_peel_type.c:__libdw_read_address Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_read_address Unexecuted instantiation: libdw_find_split_unit.c:__libdw_read_address Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_read_address Unexecuted instantiation: dwfl_report_elf.c:__libdw_read_address Unexecuted instantiation: relocate.c:__libdw_read_address Unexecuted instantiation: dwfl_module_build_id.c:__libdw_read_address Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_read_address Unexecuted instantiation: linux-proc-maps.c:__libdw_read_address Unexecuted instantiation: dwfl_addrmodule.c:__libdw_read_address Unexecuted instantiation: libdwfl_crc32.c:__libdw_read_address Unexecuted instantiation: elf-from-memory.c:__libdw_read_address Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_read_address Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_read_address Unexecuted instantiation: linux-pid-attach.c:__libdw_read_address Unexecuted instantiation: dwarf_begin.c:__libdw_read_address Unexecuted instantiation: dwarf_getabbrev.c:__libdw_read_address Unexecuted instantiation: dwarf_nextcu.c:__libdw_read_address Unexecuted instantiation: dwarf_offdie.c:__libdw_read_address Unexecuted instantiation: dwarf_formstring.c:__libdw_read_address Unexecuted instantiation: dwarf_haschildren.c:__libdw_read_address Unexecuted instantiation: dwarf_formsdata.c:__libdw_read_address Unexecuted instantiation: dwarf_formref.c:__libdw_read_address Unexecuted instantiation: dwarf_srclang.c:__libdw_read_address Unexecuted instantiation: dwarf_getlocation.c:__libdw_read_address Unexecuted instantiation: fde.c:__libdw_read_address Unexecuted instantiation: cfi.c:__libdw_read_address Unexecuted instantiation: dwarf_getcfi.c:__libdw_read_address Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_read_address Unexecuted instantiation: dwarf_get_units.c:__libdw_read_address Unexecuted instantiation: segment.c:__libdw_read_address Unexecuted instantiation: dwarf_formaddr.c:__libdw_read_address Unexecuted instantiation: dwarf_lowpc.c:__libdw_read_address Unexecuted instantiation: dwarf_ranges.c:__libdw_read_address Unexecuted instantiation: dwarf_formblock.c:__libdw_read_address Unexecuted instantiation: dwarf_next_cfi.c:__libdw_read_address Unexecuted instantiation: cie.c:__libdw_read_address Unexecuted instantiation: dwarf_highpc.c:__libdw_read_address Unexecuted instantiation: core-file.c:__libdw_read_address Unexecuted instantiation: linux-core-attach.c:__libdw_read_address Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_read_address Unexecuted instantiation: link_map.c:__libdw_read_address Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_read_address Unexecuted instantiation: derelocate.c:__libdw_read_address |
1091 | | |
1092 | | static inline int |
1093 | | __libdw_read_offset_inc (Dwarf *dbg, |
1094 | | int sec_index, const unsigned char **addrp, |
1095 | | int width, Dwarf_Off *ret, int sec_ret, |
1096 | | size_t size) |
1097 | 0 | { |
1098 | 0 | const unsigned char *addr = *addrp; |
1099 | 0 | READ_AND_RELOCATE (__libdw_relocate_offset, (*ret)); |
1100 | 0 | *addrp = addr; |
1101 | 0 | return __libdw_offset_in_section (dbg, sec_ret, *ret, size); |
1102 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_end.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_error.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_module.c:__libdw_read_offset_inc Unexecuted instantiation: offline.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_read_offset_inc Unexecuted instantiation: find-debuginfo.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_read_offset_inc Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_read_offset_inc Unexecuted instantiation: open.c:__libdw_read_offset_inc Unexecuted instantiation: image-header.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_frame.c:__libdw_read_offset_inc Unexecuted instantiation: frame_unwind.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_frame_pc.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_frame_regs.c:__libdw_read_offset_inc Unexecuted instantiation: gzip.c:__libdw_read_offset_inc Unexecuted instantiation: dwflst_process_tracker.c:__libdw_read_offset_inc Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_read_offset_inc Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_read_offset_inc Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_read_offset_inc Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_read_offset_inc Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_read_offset_inc Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_read_offset_inc Unexecuted instantiation: mips_retval.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_begin_elf.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_end.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_tag.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_error.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_attr.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_child.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_formudata.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_formref_die.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_siblingof.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_diecu.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_hasattr.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_bytesize.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_bitsize.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_formflag.c:__libdw_read_offset_inc Unexecuted instantiation: libdw_findcu.c:__libdw_read_offset_inc Unexecuted instantiation: libdw_form.c:__libdw_read_offset_inc Unexecuted instantiation: libdw_alloc.c:__libdw_read_offset_inc Unexecuted instantiation: frame-cache.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_frame_register.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_cfi_end.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_getalt.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_setalt.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_peel_type.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_read_offset_inc Unexecuted instantiation: libdw_find_split_unit.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_report_elf.c:__libdw_read_offset_inc Unexecuted instantiation: relocate.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_module_build_id.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_read_offset_inc Unexecuted instantiation: linux-proc-maps.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_addrmodule.c:__libdw_read_offset_inc Unexecuted instantiation: libdwfl_crc32.c:__libdw_read_offset_inc Unexecuted instantiation: elf-from-memory.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_read_offset_inc Unexecuted instantiation: linux-pid-attach.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_begin.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_getabbrev.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_nextcu.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_offdie.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_formstring.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_haschildren.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_formsdata.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_formref.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_srclang.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_getlocation.c:__libdw_read_offset_inc Unexecuted instantiation: fde.c:__libdw_read_offset_inc Unexecuted instantiation: cfi.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_getcfi.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_get_units.c:__libdw_read_offset_inc Unexecuted instantiation: segment.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_formaddr.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_lowpc.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_ranges.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_formblock.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_next_cfi.c:__libdw_read_offset_inc Unexecuted instantiation: cie.c:__libdw_read_offset_inc Unexecuted instantiation: dwarf_highpc.c:__libdw_read_offset_inc Unexecuted instantiation: core-file.c:__libdw_read_offset_inc Unexecuted instantiation: linux-core-attach.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_read_offset_inc Unexecuted instantiation: link_map.c:__libdw_read_offset_inc Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_read_offset_inc Unexecuted instantiation: derelocate.c:__libdw_read_offset_inc |
1103 | | |
1104 | | static inline int |
1105 | | __libdw_read_offset (Dwarf *dbg, Dwarf *dbg_ret, |
1106 | | int sec_index, const unsigned char *addr, |
1107 | | int width, Dwarf_Off *ret, int sec_ret, |
1108 | | size_t size) |
1109 | 0 | { |
1110 | 0 | READ_AND_RELOCATE (__libdw_relocate_offset, (*ret)); |
1111 | 0 | return __libdw_offset_in_section (dbg_ret, sec_ret, *ret, size); |
1112 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_read_offset Unexecuted instantiation: dwfl_end.c:__libdw_read_offset Unexecuted instantiation: dwfl_error.c:__libdw_read_offset Unexecuted instantiation: dwfl_module.c:__libdw_read_offset Unexecuted instantiation: offline.c:__libdw_read_offset Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_read_offset Unexecuted instantiation: find-debuginfo.c:__libdw_read_offset Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_read_offset Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_read_offset Unexecuted instantiation: open.c:__libdw_read_offset Unexecuted instantiation: image-header.c:__libdw_read_offset Unexecuted instantiation: dwfl_frame.c:__libdw_read_offset Unexecuted instantiation: frame_unwind.c:__libdw_read_offset Unexecuted instantiation: dwfl_frame_pc.c:__libdw_read_offset Unexecuted instantiation: dwfl_frame_regs.c:__libdw_read_offset Unexecuted instantiation: gzip.c:__libdw_read_offset Unexecuted instantiation: dwflst_process_tracker.c:__libdw_read_offset Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_read_offset Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_read_offset Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_read_offset Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_read_offset Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_read_offset Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_read_offset Unexecuted instantiation: mips_retval.c:__libdw_read_offset Unexecuted instantiation: dwarf_begin_elf.c:__libdw_read_offset Unexecuted instantiation: dwarf_end.c:__libdw_read_offset Unexecuted instantiation: dwarf_tag.c:__libdw_read_offset Unexecuted instantiation: dwarf_error.c:__libdw_read_offset Unexecuted instantiation: dwarf_attr.c:__libdw_read_offset Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_read_offset Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_read_offset Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_read_offset Unexecuted instantiation: dwarf_child.c:__libdw_read_offset Unexecuted instantiation: dwarf_formudata.c:__libdw_read_offset Unexecuted instantiation: dwarf_formref_die.c:__libdw_read_offset Unexecuted instantiation: dwarf_siblingof.c:__libdw_read_offset Unexecuted instantiation: dwarf_diecu.c:__libdw_read_offset Unexecuted instantiation: dwarf_hasattr.c:__libdw_read_offset Unexecuted instantiation: dwarf_bytesize.c:__libdw_read_offset Unexecuted instantiation: dwarf_bitsize.c:__libdw_read_offset Unexecuted instantiation: dwarf_formflag.c:__libdw_read_offset Unexecuted instantiation: libdw_findcu.c:__libdw_read_offset Unexecuted instantiation: libdw_form.c:__libdw_read_offset Unexecuted instantiation: libdw_alloc.c:__libdw_read_offset Unexecuted instantiation: frame-cache.c:__libdw_read_offset Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_read_offset Unexecuted instantiation: dwarf_frame_register.c:__libdw_read_offset Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_read_offset Unexecuted instantiation: dwarf_cfi_end.c:__libdw_read_offset Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_read_offset Unexecuted instantiation: dwarf_getalt.c:__libdw_read_offset Unexecuted instantiation: dwarf_setalt.c:__libdw_read_offset Unexecuted instantiation: dwarf_peel_type.c:__libdw_read_offset Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_read_offset Unexecuted instantiation: libdw_find_split_unit.c:__libdw_read_offset Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_read_offset Unexecuted instantiation: dwfl_report_elf.c:__libdw_read_offset Unexecuted instantiation: relocate.c:__libdw_read_offset Unexecuted instantiation: dwfl_module_build_id.c:__libdw_read_offset Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_read_offset Unexecuted instantiation: linux-proc-maps.c:__libdw_read_offset Unexecuted instantiation: dwfl_addrmodule.c:__libdw_read_offset Unexecuted instantiation: libdwfl_crc32.c:__libdw_read_offset Unexecuted instantiation: elf-from-memory.c:__libdw_read_offset Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_read_offset Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_read_offset Unexecuted instantiation: linux-pid-attach.c:__libdw_read_offset Unexecuted instantiation: dwarf_begin.c:__libdw_read_offset Unexecuted instantiation: dwarf_getabbrev.c:__libdw_read_offset Unexecuted instantiation: dwarf_nextcu.c:__libdw_read_offset Unexecuted instantiation: dwarf_offdie.c:__libdw_read_offset Unexecuted instantiation: dwarf_formstring.c:__libdw_read_offset Unexecuted instantiation: dwarf_haschildren.c:__libdw_read_offset Unexecuted instantiation: dwarf_formsdata.c:__libdw_read_offset Unexecuted instantiation: dwarf_formref.c:__libdw_read_offset Unexecuted instantiation: dwarf_srclang.c:__libdw_read_offset Unexecuted instantiation: dwarf_getlocation.c:__libdw_read_offset Unexecuted instantiation: fde.c:__libdw_read_offset Unexecuted instantiation: cfi.c:__libdw_read_offset Unexecuted instantiation: dwarf_getcfi.c:__libdw_read_offset Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_read_offset Unexecuted instantiation: dwarf_get_units.c:__libdw_read_offset Unexecuted instantiation: segment.c:__libdw_read_offset Unexecuted instantiation: dwarf_formaddr.c:__libdw_read_offset Unexecuted instantiation: dwarf_lowpc.c:__libdw_read_offset Unexecuted instantiation: dwarf_ranges.c:__libdw_read_offset Unexecuted instantiation: dwarf_formblock.c:__libdw_read_offset Unexecuted instantiation: dwarf_next_cfi.c:__libdw_read_offset Unexecuted instantiation: cie.c:__libdw_read_offset Unexecuted instantiation: dwarf_highpc.c:__libdw_read_offset Unexecuted instantiation: core-file.c:__libdw_read_offset Unexecuted instantiation: linux-core-attach.c:__libdw_read_offset Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_read_offset Unexecuted instantiation: link_map.c:__libdw_read_offset Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_read_offset Unexecuted instantiation: derelocate.c:__libdw_read_offset |
1113 | | |
1114 | | static inline size_t |
1115 | | cu_sec_idx (struct Dwarf_CU *cu) |
1116 | 0 | { |
1117 | 0 | return cu->sec_idx; |
1118 | 0 | } Unexecuted instantiation: dwfl_begin.c:cu_sec_idx Unexecuted instantiation: dwfl_end.c:cu_sec_idx Unexecuted instantiation: dwfl_error.c:cu_sec_idx Unexecuted instantiation: dwfl_module.c:cu_sec_idx Unexecuted instantiation: offline.c:cu_sec_idx Unexecuted instantiation: dwfl_module_getdwarf.c:cu_sec_idx Unexecuted instantiation: find-debuginfo.c:cu_sec_idx Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:cu_sec_idx Unexecuted instantiation: libdwfl_crc32_file.c:cu_sec_idx Unexecuted instantiation: open.c:cu_sec_idx Unexecuted instantiation: image-header.c:cu_sec_idx Unexecuted instantiation: dwfl_frame.c:cu_sec_idx Unexecuted instantiation: frame_unwind.c:cu_sec_idx Unexecuted instantiation: dwfl_frame_pc.c:cu_sec_idx Unexecuted instantiation: dwfl_frame_regs.c:cu_sec_idx Unexecuted instantiation: gzip.c:cu_sec_idx Unexecuted instantiation: dwflst_process_tracker.c:cu_sec_idx Unexecuted instantiation: dwflst_tracker_find_elf.c:cu_sec_idx Unexecuted instantiation: dwflst_tracker_elftab.c:cu_sec_idx Unexecuted instantiation: dwflst_tracker_dwfltab.c:cu_sec_idx Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:cu_sec_idx Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:cu_sec_idx Unexecuted instantiation: dwelf_elf_gnu_build_id.c:cu_sec_idx Unexecuted instantiation: mips_retval.c:cu_sec_idx Unexecuted instantiation: dwarf_begin_elf.c:cu_sec_idx Unexecuted instantiation: dwarf_end.c:cu_sec_idx Unexecuted instantiation: dwarf_tag.c:cu_sec_idx Unexecuted instantiation: dwarf_error.c:cu_sec_idx Unexecuted instantiation: dwarf_attr.c:cu_sec_idx Unexecuted instantiation: dwarf_abbrev_hash.c:cu_sec_idx Unexecuted instantiation: dwarf_attr_integrate.c:cu_sec_idx Unexecuted instantiation: dwarf_hasattr_integrate.c:cu_sec_idx Unexecuted instantiation: dwarf_child.c:cu_sec_idx Unexecuted instantiation: dwarf_formudata.c:cu_sec_idx Unexecuted instantiation: dwarf_formref_die.c:cu_sec_idx Unexecuted instantiation: dwarf_siblingof.c:cu_sec_idx Unexecuted instantiation: dwarf_diecu.c:cu_sec_idx Unexecuted instantiation: dwarf_hasattr.c:cu_sec_idx Unexecuted instantiation: dwarf_bytesize.c:cu_sec_idx Unexecuted instantiation: dwarf_bitsize.c:cu_sec_idx Unexecuted instantiation: dwarf_formflag.c:cu_sec_idx Unexecuted instantiation: libdw_findcu.c:cu_sec_idx Unexecuted instantiation: libdw_form.c:cu_sec_idx Unexecuted instantiation: libdw_alloc.c:cu_sec_idx Unexecuted instantiation: frame-cache.c:cu_sec_idx Unexecuted instantiation: dwarf_frame_cfa.c:cu_sec_idx Unexecuted instantiation: dwarf_frame_register.c:cu_sec_idx Unexecuted instantiation: dwarf_cfi_addrframe.c:cu_sec_idx Unexecuted instantiation: dwarf_cfi_end.c:cu_sec_idx Unexecuted instantiation: dwarf_aggregate_size.c:cu_sec_idx Unexecuted instantiation: dwarf_getalt.c:cu_sec_idx Unexecuted instantiation: dwarf_setalt.c:cu_sec_idx Unexecuted instantiation: dwarf_peel_type.c:cu_sec_idx Unexecuted instantiation: dwarf_default_lower_bound.c:cu_sec_idx Unexecuted instantiation: libdw_find_split_unit.c:cu_sec_idx Unexecuted instantiation: dwarf_cu_dwp_section_info.c:cu_sec_idx Unexecuted instantiation: dwfl_report_elf.c:cu_sec_idx Unexecuted instantiation: relocate.c:cu_sec_idx Unexecuted instantiation: dwfl_module_build_id.c:cu_sec_idx Unexecuted instantiation: dwfl_build_id_find_elf.c:cu_sec_idx Unexecuted instantiation: linux-proc-maps.c:cu_sec_idx Unexecuted instantiation: dwfl_addrmodule.c:cu_sec_idx Unexecuted instantiation: libdwfl_crc32.c:cu_sec_idx Unexecuted instantiation: elf-from-memory.c:cu_sec_idx Unexecuted instantiation: dwfl_module_dwarf_cfi.c:cu_sec_idx Unexecuted instantiation: dwfl_module_eh_cfi.c:cu_sec_idx Unexecuted instantiation: linux-pid-attach.c:cu_sec_idx Unexecuted instantiation: dwarf_begin.c:cu_sec_idx Unexecuted instantiation: dwarf_getabbrev.c:cu_sec_idx Unexecuted instantiation: dwarf_nextcu.c:cu_sec_idx Unexecuted instantiation: dwarf_offdie.c:cu_sec_idx Unexecuted instantiation: dwarf_formstring.c:cu_sec_idx Unexecuted instantiation: dwarf_haschildren.c:cu_sec_idx Unexecuted instantiation: dwarf_formsdata.c:cu_sec_idx Unexecuted instantiation: dwarf_formref.c:cu_sec_idx Unexecuted instantiation: dwarf_srclang.c:cu_sec_idx Unexecuted instantiation: dwarf_getlocation.c:cu_sec_idx Unexecuted instantiation: fde.c:cu_sec_idx Unexecuted instantiation: cfi.c:cu_sec_idx Unexecuted instantiation: dwarf_getcfi.c:cu_sec_idx Unexecuted instantiation: dwarf_getcfi_elf.c:cu_sec_idx Unexecuted instantiation: dwarf_get_units.c:cu_sec_idx Unexecuted instantiation: segment.c:cu_sec_idx Unexecuted instantiation: dwarf_formaddr.c:cu_sec_idx Unexecuted instantiation: dwarf_lowpc.c:cu_sec_idx Unexecuted instantiation: dwarf_ranges.c:cu_sec_idx Unexecuted instantiation: dwarf_formblock.c:cu_sec_idx Unexecuted instantiation: dwarf_next_cfi.c:cu_sec_idx Unexecuted instantiation: cie.c:cu_sec_idx Unexecuted instantiation: dwarf_highpc.c:cu_sec_idx Unexecuted instantiation: core-file.c:cu_sec_idx Unexecuted instantiation: linux-core-attach.c:cu_sec_idx Unexecuted instantiation: dwfl_segment_report_module.c:cu_sec_idx Unexecuted instantiation: link_map.c:cu_sec_idx Unexecuted instantiation: dwfl_module_report_build_id.c:cu_sec_idx Unexecuted instantiation: derelocate.c:cu_sec_idx |
1119 | | |
1120 | | static inline bool |
1121 | | is_cudie (Dwarf_Die *cudie) |
1122 | 0 | { |
1123 | 0 | return cudie->cu != NULL && CUDIE (cudie->cu).addr == cudie->addr; |
1124 | 0 | } Unexecuted instantiation: dwfl_begin.c:is_cudie Unexecuted instantiation: dwfl_end.c:is_cudie Unexecuted instantiation: dwfl_error.c:is_cudie Unexecuted instantiation: dwfl_module.c:is_cudie Unexecuted instantiation: offline.c:is_cudie Unexecuted instantiation: dwfl_module_getdwarf.c:is_cudie Unexecuted instantiation: find-debuginfo.c:is_cudie Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:is_cudie Unexecuted instantiation: libdwfl_crc32_file.c:is_cudie Unexecuted instantiation: open.c:is_cudie Unexecuted instantiation: image-header.c:is_cudie Unexecuted instantiation: dwfl_frame.c:is_cudie Unexecuted instantiation: frame_unwind.c:is_cudie Unexecuted instantiation: dwfl_frame_pc.c:is_cudie Unexecuted instantiation: dwfl_frame_regs.c:is_cudie Unexecuted instantiation: gzip.c:is_cudie Unexecuted instantiation: dwflst_process_tracker.c:is_cudie Unexecuted instantiation: dwflst_tracker_find_elf.c:is_cudie Unexecuted instantiation: dwflst_tracker_elftab.c:is_cudie Unexecuted instantiation: dwflst_tracker_dwfltab.c:is_cudie Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:is_cudie Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:is_cudie Unexecuted instantiation: dwelf_elf_gnu_build_id.c:is_cudie Unexecuted instantiation: mips_retval.c:is_cudie Unexecuted instantiation: dwarf_begin_elf.c:is_cudie Unexecuted instantiation: dwarf_end.c:is_cudie Unexecuted instantiation: dwarf_tag.c:is_cudie Unexecuted instantiation: dwarf_error.c:is_cudie Unexecuted instantiation: dwarf_attr.c:is_cudie Unexecuted instantiation: dwarf_abbrev_hash.c:is_cudie Unexecuted instantiation: dwarf_attr_integrate.c:is_cudie Unexecuted instantiation: dwarf_hasattr_integrate.c:is_cudie Unexecuted instantiation: dwarf_child.c:is_cudie Unexecuted instantiation: dwarf_formudata.c:is_cudie Unexecuted instantiation: dwarf_formref_die.c:is_cudie Unexecuted instantiation: dwarf_siblingof.c:is_cudie Unexecuted instantiation: dwarf_diecu.c:is_cudie Unexecuted instantiation: dwarf_hasattr.c:is_cudie Unexecuted instantiation: dwarf_bytesize.c:is_cudie Unexecuted instantiation: dwarf_bitsize.c:is_cudie Unexecuted instantiation: dwarf_formflag.c:is_cudie Unexecuted instantiation: libdw_findcu.c:is_cudie Unexecuted instantiation: libdw_form.c:is_cudie Unexecuted instantiation: libdw_alloc.c:is_cudie Unexecuted instantiation: frame-cache.c:is_cudie Unexecuted instantiation: dwarf_frame_cfa.c:is_cudie Unexecuted instantiation: dwarf_frame_register.c:is_cudie Unexecuted instantiation: dwarf_cfi_addrframe.c:is_cudie Unexecuted instantiation: dwarf_cfi_end.c:is_cudie Unexecuted instantiation: dwarf_aggregate_size.c:is_cudie Unexecuted instantiation: dwarf_getalt.c:is_cudie Unexecuted instantiation: dwarf_setalt.c:is_cudie Unexecuted instantiation: dwarf_peel_type.c:is_cudie Unexecuted instantiation: dwarf_default_lower_bound.c:is_cudie Unexecuted instantiation: libdw_find_split_unit.c:is_cudie Unexecuted instantiation: dwarf_cu_dwp_section_info.c:is_cudie Unexecuted instantiation: dwfl_report_elf.c:is_cudie Unexecuted instantiation: relocate.c:is_cudie Unexecuted instantiation: dwfl_module_build_id.c:is_cudie Unexecuted instantiation: dwfl_build_id_find_elf.c:is_cudie Unexecuted instantiation: linux-proc-maps.c:is_cudie Unexecuted instantiation: dwfl_addrmodule.c:is_cudie Unexecuted instantiation: libdwfl_crc32.c:is_cudie Unexecuted instantiation: elf-from-memory.c:is_cudie Unexecuted instantiation: dwfl_module_dwarf_cfi.c:is_cudie Unexecuted instantiation: dwfl_module_eh_cfi.c:is_cudie Unexecuted instantiation: linux-pid-attach.c:is_cudie Unexecuted instantiation: dwarf_begin.c:is_cudie Unexecuted instantiation: dwarf_getabbrev.c:is_cudie Unexecuted instantiation: dwarf_nextcu.c:is_cudie Unexecuted instantiation: dwarf_offdie.c:is_cudie Unexecuted instantiation: dwarf_formstring.c:is_cudie Unexecuted instantiation: dwarf_haschildren.c:is_cudie Unexecuted instantiation: dwarf_formsdata.c:is_cudie Unexecuted instantiation: dwarf_formref.c:is_cudie Unexecuted instantiation: dwarf_srclang.c:is_cudie Unexecuted instantiation: dwarf_getlocation.c:is_cudie Unexecuted instantiation: fde.c:is_cudie Unexecuted instantiation: cfi.c:is_cudie Unexecuted instantiation: dwarf_getcfi.c:is_cudie Unexecuted instantiation: dwarf_getcfi_elf.c:is_cudie Unexecuted instantiation: dwarf_get_units.c:is_cudie Unexecuted instantiation: segment.c:is_cudie Unexecuted instantiation: dwarf_formaddr.c:is_cudie Unexecuted instantiation: dwarf_lowpc.c:is_cudie Unexecuted instantiation: dwarf_ranges.c:is_cudie Unexecuted instantiation: dwarf_formblock.c:is_cudie Unexecuted instantiation: dwarf_next_cfi.c:is_cudie Unexecuted instantiation: cie.c:is_cudie Unexecuted instantiation: dwarf_highpc.c:is_cudie Unexecuted instantiation: core-file.c:is_cudie Unexecuted instantiation: linux-core-attach.c:is_cudie Unexecuted instantiation: dwfl_segment_report_module.c:is_cudie Unexecuted instantiation: link_map.c:is_cudie Unexecuted instantiation: dwfl_module_report_build_id.c:is_cudie Unexecuted instantiation: derelocate.c:is_cudie |
1125 | | |
1126 | | /* Read up begin/end pair and increment read pointer. |
1127 | | - If it's normal range record, set up *BEGINP and *ENDP and return 0. |
1128 | | - If it's base address selection record, set up *BASEP and return 1. |
1129 | | - If it's end of rangelist, don't set anything and return 2 |
1130 | | - If an error occurs, don't set anything and return <0. */ |
1131 | | int __libdw_read_begin_end_pair_inc (Dwarf_CU *cu, int sec_index, |
1132 | | const unsigned char **readp, |
1133 | | const unsigned char *readend, |
1134 | | int width, |
1135 | | Dwarf_Addr *beginp, Dwarf_Addr *endp, |
1136 | | Dwarf_Addr *basep) |
1137 | | internal_function; |
1138 | | |
1139 | | const unsigned char * __libdw_formptr (Dwarf_Attribute *attr, int sec_index, |
1140 | | int err_nodata, |
1141 | | const unsigned char **endpp, |
1142 | | Dwarf_Off *offsetp) |
1143 | | internal_function; |
1144 | | |
1145 | | /* Fills in the given attribute to point at an empty location expression. */ |
1146 | | void __libdw_empty_loc_attr (Dwarf_Attribute *attr) |
1147 | | internal_function; |
1148 | | |
1149 | | /* Load .debug_line unit at DEBUG_LINE_OFFSET. COMP_DIR is a value of |
1150 | | DW_AT_comp_dir or NULL if that attribute is not available. Caches |
1151 | | the loaded unit and optionally set *LINESP and/or *FILESP (if not |
1152 | | NULL) with loaded information. Returns 0 for success or a negative |
1153 | | value for failure. */ |
1154 | | int __libdw_getsrclines (Dwarf *dbg, Dwarf_Off debug_line_offset, |
1155 | | const char *comp_dir, unsigned address_size, |
1156 | | Dwarf_Lines **linesp, Dwarf_Files **filesp) |
1157 | | internal_function |
1158 | | __nonnull_attribute__ (1); |
1159 | | |
1160 | | /* Load .debug_line unit at DEBUG_LINE_OFFSET. COMP_DIR is a value of |
1161 | | DW_AT_comp_dir or NULL if that attribute is not available. Caches |
1162 | | the loaded unit and set *FILESP with loaded information. Returns 0 |
1163 | | for success or a negative value for failure. */ |
1164 | | int __libdw_getsrcfiles (Dwarf *dbg, Dwarf_Off debug_line_offset, |
1165 | | const char *comp_dir, unsigned address_size, |
1166 | | Dwarf_Files **filesp) |
1167 | | internal_function |
1168 | | __nonnull_attribute__ (1); |
1169 | | |
1170 | | /* Load and return value of DW_AT_comp_dir from CUDIE. */ |
1171 | | const char *__libdw_getcompdir (Dwarf_Die *cudie); |
1172 | | |
1173 | | /* Get the base address for the CU, fetches it when not yet set. |
1174 | | This is used as initial base address for ranges and loclists. */ |
1175 | | Dwarf_Addr __libdw_cu_base_address (Dwarf_CU *cu); |
1176 | | |
1177 | | /* Get the address base for the CU, fetches it when not yet set. */ |
1178 | | static inline Dwarf_Off |
1179 | | __libdw_cu_addr_base (Dwarf_CU *cu) |
1180 | 0 | { |
1181 | 0 | if (cu->addr_base == (Dwarf_Off) -1) |
1182 | 0 | { |
1183 | 0 | Dwarf_Die cu_die = CUDIE(cu); |
1184 | 0 | Dwarf_Attribute attr; |
1185 | 0 | Dwarf_Off offset = 0; |
1186 | 0 | if (dwarf_attr (&cu_die, DW_AT_GNU_addr_base, &attr) != NULL |
1187 | 0 | || dwarf_attr (&cu_die, DW_AT_addr_base, &attr) != NULL) |
1188 | 0 | { |
1189 | 0 | Dwarf_Word off; |
1190 | 0 | if (dwarf_formudata (&attr, &off) == 0) |
1191 | 0 | offset = off; |
1192 | 0 | } |
1193 | 0 | cu->addr_base = offset; |
1194 | 0 | } |
1195 | |
|
1196 | 0 | return cu->addr_base; |
1197 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_end.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_error.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_module.c:__libdw_cu_addr_base Unexecuted instantiation: offline.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_cu_addr_base Unexecuted instantiation: find-debuginfo.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_cu_addr_base Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_cu_addr_base Unexecuted instantiation: open.c:__libdw_cu_addr_base Unexecuted instantiation: image-header.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_frame.c:__libdw_cu_addr_base Unexecuted instantiation: frame_unwind.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_frame_pc.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_frame_regs.c:__libdw_cu_addr_base Unexecuted instantiation: gzip.c:__libdw_cu_addr_base Unexecuted instantiation: dwflst_process_tracker.c:__libdw_cu_addr_base Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_cu_addr_base Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_cu_addr_base Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_cu_addr_base Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_cu_addr_base Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_cu_addr_base Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_cu_addr_base Unexecuted instantiation: mips_retval.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_begin_elf.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_end.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_tag.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_error.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_attr.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_child.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_formudata.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_formref_die.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_siblingof.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_diecu.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_hasattr.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_bytesize.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_bitsize.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_formflag.c:__libdw_cu_addr_base Unexecuted instantiation: libdw_findcu.c:__libdw_cu_addr_base Unexecuted instantiation: libdw_form.c:__libdw_cu_addr_base Unexecuted instantiation: libdw_alloc.c:__libdw_cu_addr_base Unexecuted instantiation: frame-cache.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_frame_register.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_cfi_end.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_getalt.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_setalt.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_peel_type.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_cu_addr_base Unexecuted instantiation: libdw_find_split_unit.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_report_elf.c:__libdw_cu_addr_base Unexecuted instantiation: relocate.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_module_build_id.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_cu_addr_base Unexecuted instantiation: linux-proc-maps.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_addrmodule.c:__libdw_cu_addr_base Unexecuted instantiation: libdwfl_crc32.c:__libdw_cu_addr_base Unexecuted instantiation: elf-from-memory.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_cu_addr_base Unexecuted instantiation: linux-pid-attach.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_begin.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_getabbrev.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_nextcu.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_offdie.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_formstring.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_haschildren.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_formsdata.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_formref.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_srclang.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_getlocation.c:__libdw_cu_addr_base Unexecuted instantiation: fde.c:__libdw_cu_addr_base Unexecuted instantiation: cfi.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_getcfi.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_get_units.c:__libdw_cu_addr_base Unexecuted instantiation: segment.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_formaddr.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_lowpc.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_ranges.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_formblock.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_next_cfi.c:__libdw_cu_addr_base Unexecuted instantiation: cie.c:__libdw_cu_addr_base Unexecuted instantiation: dwarf_highpc.c:__libdw_cu_addr_base Unexecuted instantiation: core-file.c:__libdw_cu_addr_base Unexecuted instantiation: linux-core-attach.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_cu_addr_base Unexecuted instantiation: link_map.c:__libdw_cu_addr_base Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_cu_addr_base Unexecuted instantiation: derelocate.c:__libdw_cu_addr_base |
1198 | | |
1199 | | /* Gets the .debug_str_offsets base offset to use. static inline to |
1200 | | be shared between libdw and eu-readelf. */ |
1201 | | static inline Dwarf_Off |
1202 | | str_offsets_base_off (Dwarf *dbg, Dwarf_CU *cu) |
1203 | 0 | { |
1204 | | /* If we don't have a CU, then find and use the first one in the |
1205 | | debug file (when we support .dwp files, we must actually find the |
1206 | | one matching our "caller" - aka macro or line). If we (now) have |
1207 | | a cu and str_offsets_base attribute, just use that. Otherwise |
1208 | | use the first offset. But we might have to parse the header |
1209 | | first, but only if this is version 5. Assume if all else fails, |
1210 | | this is version 4, without header. */ |
1211 | |
|
1212 | 0 | if (cu == NULL && dbg != NULL) |
1213 | 0 | { |
1214 | 0 | Dwarf_CU *first_cu; |
1215 | 0 | if (dwarf_get_units (dbg, NULL, &first_cu, NULL, NULL, NULL, NULL) == 0) |
1216 | 0 | cu = first_cu; |
1217 | 0 | } |
1218 | |
|
1219 | 0 | Dwarf_Off off = 0; |
1220 | 0 | if (cu != NULL) |
1221 | 0 | { |
1222 | 0 | mutex_lock (cu->str_off_base_lock); |
1223 | 0 | if (cu->str_off_base == (Dwarf_Off) -1) |
1224 | 0 | { |
1225 | 0 | Dwarf_Off dwp_offset; |
1226 | 0 | if (dwarf_cu_dwp_section_info (cu, DW_SECT_STR_OFFSETS, &dwp_offset, |
1227 | 0 | NULL) == 0) |
1228 | 0 | off = dwp_offset; |
1229 | 0 | Dwarf_Die cu_die = CUDIE(cu); |
1230 | 0 | Dwarf_Attribute attr; |
1231 | 0 | if (dwarf_attr (&cu_die, DW_AT_str_offsets_base, &attr) != NULL) |
1232 | 0 | { |
1233 | 0 | Dwarf_Word base; |
1234 | 0 | if (dwarf_formudata (&attr, &base) == 0) |
1235 | 0 | { |
1236 | 0 | cu->str_off_base = off + base; |
1237 | 0 | mutex_unlock (cu->str_off_base_lock); |
1238 | 0 | return cu->str_off_base; |
1239 | 0 | } |
1240 | 0 | } |
1241 | | /* For older DWARF simply assume zero (no header). */ |
1242 | 0 | if (cu->version < 5) |
1243 | 0 | { |
1244 | 0 | cu->str_off_base = off; |
1245 | 0 | mutex_unlock (cu->str_off_base_lock); |
1246 | 0 | return cu->str_off_base; |
1247 | 0 | } |
1248 | | |
1249 | 0 | if (dbg == NULL) |
1250 | 0 | dbg = cu->dbg; |
1251 | 0 | } |
1252 | 0 | else |
1253 | 0 | { |
1254 | 0 | mutex_unlock (cu->str_off_base_lock); |
1255 | 0 | return cu->str_off_base; |
1256 | 0 | } |
1257 | 0 | } |
1258 | | |
1259 | | /* No str_offsets_base attribute, we have to assume "zero". |
1260 | | But there could be a header first. */ |
1261 | 0 | if (dbg == NULL) |
1262 | 0 | goto no_header; |
1263 | | |
1264 | 0 | Elf_Data *data = dbg->sectiondata[IDX_debug_str_offsets]; |
1265 | 0 | if (data == NULL) |
1266 | 0 | goto no_header; |
1267 | | |
1268 | 0 | const unsigned char *start; |
1269 | 0 | const unsigned char *readp; |
1270 | 0 | const unsigned char *readendp; |
1271 | 0 | start = readp = (const unsigned char *) data->d_buf; |
1272 | 0 | readendp = (const unsigned char *) data->d_buf + data->d_size; |
1273 | |
|
1274 | 0 | uint64_t unit_length; |
1275 | 0 | uint16_t version; |
1276 | |
|
1277 | 0 | unit_length = read_4ubyte_unaligned_inc (dbg, readp); |
1278 | 0 | if (unlikely (unit_length == 0xffffffff)) |
1279 | 0 | { |
1280 | 0 | if (unlikely (readendp - readp < 8)) |
1281 | 0 | goto no_header; |
1282 | 0 | unit_length = read_8ubyte_unaligned_inc (dbg, readp); |
1283 | | /* In theory the offset size could be different |
1284 | | between CU and str_offsets unit. But we just |
1285 | | ignore that here. */ |
1286 | 0 | } |
1287 | | |
1288 | | /* We need at least 2-bytes (version) + 2-bytes (padding) = |
1289 | | 4 bytes to complete the header. And this unit cannot go |
1290 | | beyond the section data. */ |
1291 | 0 | if (readendp - readp < 4 |
1292 | 0 | || unit_length < 4 |
1293 | 0 | || (uint64_t) (readendp - readp) < unit_length) |
1294 | 0 | goto no_header; |
1295 | | |
1296 | 0 | version = read_2ubyte_unaligned_inc (dbg, readp); |
1297 | 0 | if (version != 5) |
1298 | 0 | goto no_header; |
1299 | | /* padding */ |
1300 | 0 | read_2ubyte_unaligned_inc (dbg, readp); |
1301 | |
|
1302 | 0 | off += (Dwarf_Off) (readp - start); |
1303 | |
|
1304 | 0 | no_header: |
1305 | 0 | if (cu != NULL) |
1306 | 0 | { |
1307 | 0 | cu->str_off_base = off; |
1308 | 0 | mutex_unlock (cu->str_off_base_lock); |
1309 | 0 | } |
1310 | |
|
1311 | 0 | return off; |
1312 | 0 | } Unexecuted instantiation: dwfl_begin.c:str_offsets_base_off Unexecuted instantiation: dwfl_end.c:str_offsets_base_off Unexecuted instantiation: dwfl_error.c:str_offsets_base_off Unexecuted instantiation: dwfl_module.c:str_offsets_base_off Unexecuted instantiation: offline.c:str_offsets_base_off Unexecuted instantiation: dwfl_module_getdwarf.c:str_offsets_base_off Unexecuted instantiation: find-debuginfo.c:str_offsets_base_off Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:str_offsets_base_off Unexecuted instantiation: libdwfl_crc32_file.c:str_offsets_base_off Unexecuted instantiation: open.c:str_offsets_base_off Unexecuted instantiation: image-header.c:str_offsets_base_off Unexecuted instantiation: dwfl_frame.c:str_offsets_base_off Unexecuted instantiation: frame_unwind.c:str_offsets_base_off Unexecuted instantiation: dwfl_frame_pc.c:str_offsets_base_off Unexecuted instantiation: dwfl_frame_regs.c:str_offsets_base_off Unexecuted instantiation: gzip.c:str_offsets_base_off Unexecuted instantiation: dwflst_process_tracker.c:str_offsets_base_off Unexecuted instantiation: dwflst_tracker_find_elf.c:str_offsets_base_off Unexecuted instantiation: dwflst_tracker_elftab.c:str_offsets_base_off Unexecuted instantiation: dwflst_tracker_dwfltab.c:str_offsets_base_off Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:str_offsets_base_off Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:str_offsets_base_off Unexecuted instantiation: dwelf_elf_gnu_build_id.c:str_offsets_base_off Unexecuted instantiation: mips_retval.c:str_offsets_base_off Unexecuted instantiation: dwarf_begin_elf.c:str_offsets_base_off Unexecuted instantiation: dwarf_end.c:str_offsets_base_off Unexecuted instantiation: dwarf_tag.c:str_offsets_base_off Unexecuted instantiation: dwarf_error.c:str_offsets_base_off Unexecuted instantiation: dwarf_attr.c:str_offsets_base_off Unexecuted instantiation: dwarf_abbrev_hash.c:str_offsets_base_off Unexecuted instantiation: dwarf_attr_integrate.c:str_offsets_base_off Unexecuted instantiation: dwarf_hasattr_integrate.c:str_offsets_base_off Unexecuted instantiation: dwarf_child.c:str_offsets_base_off Unexecuted instantiation: dwarf_formudata.c:str_offsets_base_off Unexecuted instantiation: dwarf_formref_die.c:str_offsets_base_off Unexecuted instantiation: dwarf_siblingof.c:str_offsets_base_off Unexecuted instantiation: dwarf_diecu.c:str_offsets_base_off Unexecuted instantiation: dwarf_hasattr.c:str_offsets_base_off Unexecuted instantiation: dwarf_bytesize.c:str_offsets_base_off Unexecuted instantiation: dwarf_bitsize.c:str_offsets_base_off Unexecuted instantiation: dwarf_formflag.c:str_offsets_base_off Unexecuted instantiation: libdw_findcu.c:str_offsets_base_off Unexecuted instantiation: libdw_form.c:str_offsets_base_off Unexecuted instantiation: libdw_alloc.c:str_offsets_base_off Unexecuted instantiation: frame-cache.c:str_offsets_base_off Unexecuted instantiation: dwarf_frame_cfa.c:str_offsets_base_off Unexecuted instantiation: dwarf_frame_register.c:str_offsets_base_off Unexecuted instantiation: dwarf_cfi_addrframe.c:str_offsets_base_off Unexecuted instantiation: dwarf_cfi_end.c:str_offsets_base_off Unexecuted instantiation: dwarf_aggregate_size.c:str_offsets_base_off Unexecuted instantiation: dwarf_getalt.c:str_offsets_base_off Unexecuted instantiation: dwarf_setalt.c:str_offsets_base_off Unexecuted instantiation: dwarf_peel_type.c:str_offsets_base_off Unexecuted instantiation: dwarf_default_lower_bound.c:str_offsets_base_off Unexecuted instantiation: libdw_find_split_unit.c:str_offsets_base_off Unexecuted instantiation: dwarf_cu_dwp_section_info.c:str_offsets_base_off Unexecuted instantiation: dwfl_report_elf.c:str_offsets_base_off Unexecuted instantiation: relocate.c:str_offsets_base_off Unexecuted instantiation: dwfl_module_build_id.c:str_offsets_base_off Unexecuted instantiation: dwfl_build_id_find_elf.c:str_offsets_base_off Unexecuted instantiation: linux-proc-maps.c:str_offsets_base_off Unexecuted instantiation: dwfl_addrmodule.c:str_offsets_base_off Unexecuted instantiation: libdwfl_crc32.c:str_offsets_base_off Unexecuted instantiation: elf-from-memory.c:str_offsets_base_off Unexecuted instantiation: dwfl_module_dwarf_cfi.c:str_offsets_base_off Unexecuted instantiation: dwfl_module_eh_cfi.c:str_offsets_base_off Unexecuted instantiation: linux-pid-attach.c:str_offsets_base_off Unexecuted instantiation: dwarf_begin.c:str_offsets_base_off Unexecuted instantiation: dwarf_getabbrev.c:str_offsets_base_off Unexecuted instantiation: dwarf_nextcu.c:str_offsets_base_off Unexecuted instantiation: dwarf_offdie.c:str_offsets_base_off Unexecuted instantiation: dwarf_formstring.c:str_offsets_base_off Unexecuted instantiation: dwarf_haschildren.c:str_offsets_base_off Unexecuted instantiation: dwarf_formsdata.c:str_offsets_base_off Unexecuted instantiation: dwarf_formref.c:str_offsets_base_off Unexecuted instantiation: dwarf_srclang.c:str_offsets_base_off Unexecuted instantiation: dwarf_getlocation.c:str_offsets_base_off Unexecuted instantiation: fde.c:str_offsets_base_off Unexecuted instantiation: cfi.c:str_offsets_base_off Unexecuted instantiation: dwarf_getcfi.c:str_offsets_base_off Unexecuted instantiation: dwarf_getcfi_elf.c:str_offsets_base_off Unexecuted instantiation: dwarf_get_units.c:str_offsets_base_off Unexecuted instantiation: segment.c:str_offsets_base_off Unexecuted instantiation: dwarf_formaddr.c:str_offsets_base_off Unexecuted instantiation: dwarf_lowpc.c:str_offsets_base_off Unexecuted instantiation: dwarf_ranges.c:str_offsets_base_off Unexecuted instantiation: dwarf_formblock.c:str_offsets_base_off Unexecuted instantiation: dwarf_next_cfi.c:str_offsets_base_off Unexecuted instantiation: cie.c:str_offsets_base_off Unexecuted instantiation: dwarf_highpc.c:str_offsets_base_off Unexecuted instantiation: core-file.c:str_offsets_base_off Unexecuted instantiation: linux-core-attach.c:str_offsets_base_off Unexecuted instantiation: dwfl_segment_report_module.c:str_offsets_base_off Unexecuted instantiation: link_map.c:str_offsets_base_off Unexecuted instantiation: dwfl_module_report_build_id.c:str_offsets_base_off Unexecuted instantiation: derelocate.c:str_offsets_base_off |
1313 | | |
1314 | | |
1315 | | /* Get the string offsets base for the CU, fetches it when not yet set. */ |
1316 | | static inline Dwarf_Off __libdw_cu_str_off_base (Dwarf_CU *cu) |
1317 | 0 | { |
1318 | 0 | return str_offsets_base_off (NULL, cu); |
1319 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_end.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_error.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_module.c:__libdw_cu_str_off_base Unexecuted instantiation: offline.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_cu_str_off_base Unexecuted instantiation: find-debuginfo.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_cu_str_off_base Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_cu_str_off_base Unexecuted instantiation: open.c:__libdw_cu_str_off_base Unexecuted instantiation: image-header.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_frame.c:__libdw_cu_str_off_base Unexecuted instantiation: frame_unwind.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_frame_pc.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_frame_regs.c:__libdw_cu_str_off_base Unexecuted instantiation: gzip.c:__libdw_cu_str_off_base Unexecuted instantiation: dwflst_process_tracker.c:__libdw_cu_str_off_base Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_cu_str_off_base Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_cu_str_off_base Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_cu_str_off_base Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_cu_str_off_base Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_cu_str_off_base Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_cu_str_off_base Unexecuted instantiation: mips_retval.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_begin_elf.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_end.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_tag.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_error.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_attr.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_child.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_formudata.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_formref_die.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_siblingof.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_diecu.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_hasattr.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_bytesize.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_bitsize.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_formflag.c:__libdw_cu_str_off_base Unexecuted instantiation: libdw_findcu.c:__libdw_cu_str_off_base Unexecuted instantiation: libdw_form.c:__libdw_cu_str_off_base Unexecuted instantiation: libdw_alloc.c:__libdw_cu_str_off_base Unexecuted instantiation: frame-cache.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_frame_register.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_cfi_end.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_getalt.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_setalt.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_peel_type.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_cu_str_off_base Unexecuted instantiation: libdw_find_split_unit.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_report_elf.c:__libdw_cu_str_off_base Unexecuted instantiation: relocate.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_module_build_id.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_cu_str_off_base Unexecuted instantiation: linux-proc-maps.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_addrmodule.c:__libdw_cu_str_off_base Unexecuted instantiation: libdwfl_crc32.c:__libdw_cu_str_off_base Unexecuted instantiation: elf-from-memory.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_cu_str_off_base Unexecuted instantiation: linux-pid-attach.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_begin.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_getabbrev.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_nextcu.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_offdie.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_formstring.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_haschildren.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_formsdata.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_formref.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_srclang.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_getlocation.c:__libdw_cu_str_off_base Unexecuted instantiation: fde.c:__libdw_cu_str_off_base Unexecuted instantiation: cfi.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_getcfi.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_get_units.c:__libdw_cu_str_off_base Unexecuted instantiation: segment.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_formaddr.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_lowpc.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_ranges.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_formblock.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_next_cfi.c:__libdw_cu_str_off_base Unexecuted instantiation: cie.c:__libdw_cu_str_off_base Unexecuted instantiation: dwarf_highpc.c:__libdw_cu_str_off_base Unexecuted instantiation: core-file.c:__libdw_cu_str_off_base Unexecuted instantiation: linux-core-attach.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_cu_str_off_base Unexecuted instantiation: link_map.c:__libdw_cu_str_off_base Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_cu_str_off_base Unexecuted instantiation: derelocate.c:__libdw_cu_str_off_base |
1320 | | |
1321 | | |
1322 | | /* Either a direct offset into .debug_ranges for version < 5, or the |
1323 | | start of the offset table in .debug_rnglists for version > 5. */ |
1324 | | static inline Dwarf_Off |
1325 | | __libdw_cu_ranges_base (Dwarf_CU *cu) |
1326 | 0 | { |
1327 | 0 | if (cu->ranges_base == (Dwarf_Off) -1) |
1328 | 0 | { |
1329 | 0 | Dwarf_Off offset = 0; |
1330 | 0 | Dwarf_Die cu_die = CUDIE(cu); |
1331 | 0 | Dwarf_Attribute attr; |
1332 | 0 | if (cu->version < 5) |
1333 | 0 | { |
1334 | 0 | if (dwarf_attr (&cu_die, DW_AT_GNU_ranges_base, &attr) != NULL) |
1335 | 0 | { |
1336 | 0 | Dwarf_Word off; |
1337 | 0 | if (dwarf_formudata (&attr, &off) == 0) |
1338 | 0 | offset = off; |
1339 | 0 | } |
1340 | 0 | } |
1341 | 0 | else |
1342 | 0 | { |
1343 | 0 | Dwarf_Off dwp_offset; |
1344 | 0 | if (dwarf_cu_dwp_section_info (cu, DW_SECT_RNGLISTS, &dwp_offset, |
1345 | 0 | NULL) == 0) |
1346 | 0 | offset = dwp_offset; |
1347 | |
|
1348 | 0 | if (dwarf_attr (&cu_die, DW_AT_rnglists_base, &attr) != NULL) |
1349 | 0 | { |
1350 | 0 | Dwarf_Word off; |
1351 | 0 | if (dwarf_formudata (&attr, &off) == 0) |
1352 | 0 | offset += off; |
1353 | 0 | } |
1354 | | |
1355 | | /* There wasn't an rnglists_base, if the Dwarf does have a |
1356 | | .debug_rnglists section, then it might be we need the |
1357 | | base after the first header. */ |
1358 | 0 | Elf_Data *data = cu->dbg->sectiondata[IDX_debug_rnglists]; |
1359 | 0 | if (offset == dwp_offset && data != NULL) |
1360 | 0 | { |
1361 | 0 | Dwarf *dbg = cu->dbg; |
1362 | 0 | const unsigned char *readp = data->d_buf; |
1363 | 0 | const unsigned char *const dataend |
1364 | 0 | = (unsigned char *) data->d_buf + data->d_size; |
1365 | |
|
1366 | 0 | uint64_t unit_length = read_4ubyte_unaligned_inc (dbg, readp); |
1367 | 0 | unsigned int offset_size = 4; |
1368 | 0 | if (unlikely (unit_length == 0xffffffff)) |
1369 | 0 | { |
1370 | 0 | if (unlikely (readp > dataend - 8)) |
1371 | 0 | goto no_header; |
1372 | | |
1373 | 0 | unit_length = read_8ubyte_unaligned_inc (dbg, readp); |
1374 | 0 | offset_size = 8; |
1375 | 0 | } |
1376 | | |
1377 | 0 | if (readp > dataend - 8 |
1378 | 0 | || unit_length < 8 |
1379 | 0 | || unit_length > (uint64_t) (dataend - readp)) |
1380 | 0 | goto no_header; |
1381 | | |
1382 | 0 | uint16_t version = read_2ubyte_unaligned_inc (dbg, readp); |
1383 | 0 | if (version != 5) |
1384 | 0 | goto no_header; |
1385 | | |
1386 | 0 | uint8_t address_size = *readp++; |
1387 | 0 | if (address_size != 4 && address_size != 8) |
1388 | 0 | goto no_header; |
1389 | | |
1390 | 0 | uint8_t segment_size = *readp++; |
1391 | 0 | if (segment_size != 0) |
1392 | 0 | goto no_header; |
1393 | | |
1394 | 0 | uint32_t offset_entry_count; |
1395 | 0 | offset_entry_count = read_4ubyte_unaligned_inc (dbg, readp); |
1396 | |
|
1397 | 0 | const unsigned char *offset_array_start = readp; |
1398 | 0 | if (offset_entry_count <= 0) |
1399 | 0 | goto no_header; |
1400 | | |
1401 | 0 | uint64_t needed = offset_entry_count * offset_size; |
1402 | 0 | if (unit_length - 8 < needed) |
1403 | 0 | goto no_header; |
1404 | | |
1405 | 0 | offset += (Dwarf_Off) (offset_array_start |
1406 | 0 | - (unsigned char *) data->d_buf); |
1407 | 0 | } |
1408 | 0 | } |
1409 | 0 | no_header: |
1410 | 0 | cu->ranges_base = offset; |
1411 | 0 | } |
1412 | | |
1413 | 0 | return cu->ranges_base; |
1414 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_end.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_error.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_module.c:__libdw_cu_ranges_base Unexecuted instantiation: offline.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_cu_ranges_base Unexecuted instantiation: find-debuginfo.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_cu_ranges_base Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_cu_ranges_base Unexecuted instantiation: open.c:__libdw_cu_ranges_base Unexecuted instantiation: image-header.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_frame.c:__libdw_cu_ranges_base Unexecuted instantiation: frame_unwind.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_frame_pc.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_frame_regs.c:__libdw_cu_ranges_base Unexecuted instantiation: gzip.c:__libdw_cu_ranges_base Unexecuted instantiation: dwflst_process_tracker.c:__libdw_cu_ranges_base Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_cu_ranges_base Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_cu_ranges_base Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_cu_ranges_base Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_cu_ranges_base Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_cu_ranges_base Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_cu_ranges_base Unexecuted instantiation: mips_retval.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_begin_elf.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_end.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_tag.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_error.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_attr.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_child.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_formudata.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_formref_die.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_siblingof.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_diecu.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_hasattr.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_bytesize.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_bitsize.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_formflag.c:__libdw_cu_ranges_base Unexecuted instantiation: libdw_findcu.c:__libdw_cu_ranges_base Unexecuted instantiation: libdw_form.c:__libdw_cu_ranges_base Unexecuted instantiation: libdw_alloc.c:__libdw_cu_ranges_base Unexecuted instantiation: frame-cache.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_frame_register.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_cfi_end.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_getalt.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_setalt.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_peel_type.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_cu_ranges_base Unexecuted instantiation: libdw_find_split_unit.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_report_elf.c:__libdw_cu_ranges_base Unexecuted instantiation: relocate.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_module_build_id.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_cu_ranges_base Unexecuted instantiation: linux-proc-maps.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_addrmodule.c:__libdw_cu_ranges_base Unexecuted instantiation: libdwfl_crc32.c:__libdw_cu_ranges_base Unexecuted instantiation: elf-from-memory.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_cu_ranges_base Unexecuted instantiation: linux-pid-attach.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_begin.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_getabbrev.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_nextcu.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_offdie.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_formstring.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_haschildren.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_formsdata.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_formref.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_srclang.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_getlocation.c:__libdw_cu_ranges_base Unexecuted instantiation: fde.c:__libdw_cu_ranges_base Unexecuted instantiation: cfi.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_getcfi.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_get_units.c:__libdw_cu_ranges_base Unexecuted instantiation: segment.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_formaddr.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_lowpc.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_ranges.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_formblock.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_next_cfi.c:__libdw_cu_ranges_base Unexecuted instantiation: cie.c:__libdw_cu_ranges_base Unexecuted instantiation: dwarf_highpc.c:__libdw_cu_ranges_base Unexecuted instantiation: core-file.c:__libdw_cu_ranges_base Unexecuted instantiation: linux-core-attach.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_cu_ranges_base Unexecuted instantiation: link_map.c:__libdw_cu_ranges_base Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_cu_ranges_base Unexecuted instantiation: derelocate.c:__libdw_cu_ranges_base |
1415 | | |
1416 | | |
1417 | | /* The start of the offset table in .debug_loclists for DWARF5. */ |
1418 | | static inline Dwarf_Off |
1419 | | __libdw_cu_locs_base (Dwarf_CU *cu) |
1420 | 0 | { |
1421 | 0 | if (cu->locs_base == (Dwarf_Off) -1) |
1422 | 0 | { |
1423 | 0 | Dwarf_Off offset = 0; |
1424 | 0 | Dwarf_Off dwp_offset; |
1425 | 0 | if (dwarf_cu_dwp_section_info (cu, DW_SECT_LOCLISTS, &dwp_offset, NULL) |
1426 | 0 | == 0) |
1427 | 0 | offset = dwp_offset; |
1428 | |
|
1429 | 0 | Dwarf_Die cu_die = CUDIE(cu); |
1430 | 0 | Dwarf_Attribute attr; |
1431 | 0 | if (dwarf_attr (&cu_die, DW_AT_loclists_base, &attr) != NULL) |
1432 | 0 | { |
1433 | 0 | Dwarf_Word off; |
1434 | 0 | if (dwarf_formudata (&attr, &off) == 0) |
1435 | 0 | offset += off; |
1436 | 0 | } |
1437 | | |
1438 | | /* There wasn't an loclists_base, if the Dwarf does have a |
1439 | | .debug_loclists section, then it might be we need the |
1440 | | base after the first header. */ |
1441 | 0 | Elf_Data *data = cu->dbg->sectiondata[IDX_debug_loclists]; |
1442 | 0 | if (offset == dwp_offset && data != NULL) |
1443 | 0 | { |
1444 | 0 | Dwarf *dbg = cu->dbg; |
1445 | 0 | const unsigned char *readp = data->d_buf; |
1446 | 0 | const unsigned char *const dataend |
1447 | 0 | = (unsigned char *) data->d_buf + data->d_size; |
1448 | |
|
1449 | 0 | uint64_t unit_length = read_4ubyte_unaligned_inc (dbg, readp); |
1450 | 0 | unsigned int offset_size = 4; |
1451 | 0 | if (unlikely (unit_length == 0xffffffff)) |
1452 | 0 | { |
1453 | 0 | if (unlikely (readp > dataend - 8)) |
1454 | 0 | goto no_header; |
1455 | | |
1456 | 0 | unit_length = read_8ubyte_unaligned_inc (dbg, readp); |
1457 | 0 | offset_size = 8; |
1458 | 0 | } |
1459 | | |
1460 | 0 | if (readp > dataend - 8 |
1461 | 0 | || unit_length < 8 |
1462 | 0 | || unit_length > (uint64_t) (dataend - readp)) |
1463 | 0 | goto no_header; |
1464 | | |
1465 | 0 | uint16_t version = read_2ubyte_unaligned_inc (dbg, readp); |
1466 | 0 | if (version != 5) |
1467 | 0 | goto no_header; |
1468 | | |
1469 | 0 | uint8_t address_size = *readp++; |
1470 | 0 | if (address_size != 4 && address_size != 8) |
1471 | 0 | goto no_header; |
1472 | | |
1473 | 0 | uint8_t segment_size = *readp++; |
1474 | 0 | if (segment_size != 0) |
1475 | 0 | goto no_header; |
1476 | | |
1477 | 0 | uint32_t offset_entry_count; |
1478 | 0 | offset_entry_count = read_4ubyte_unaligned_inc (dbg, readp); |
1479 | |
|
1480 | 0 | const unsigned char *offset_array_start = readp; |
1481 | 0 | if (offset_entry_count <= 0) |
1482 | 0 | goto no_header; |
1483 | | |
1484 | 0 | uint64_t needed = offset_entry_count * offset_size; |
1485 | 0 | if (unit_length - 8 < needed) |
1486 | 0 | goto no_header; |
1487 | | |
1488 | 0 | offset += (Dwarf_Off) (offset_array_start |
1489 | 0 | - (unsigned char *) data->d_buf); |
1490 | 0 | } |
1491 | | |
1492 | 0 | no_header: |
1493 | 0 | cu->locs_base = offset; |
1494 | 0 | } |
1495 | | |
1496 | 0 | return cu->locs_base; |
1497 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_end.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_error.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_module.c:__libdw_cu_locs_base Unexecuted instantiation: offline.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_cu_locs_base Unexecuted instantiation: find-debuginfo.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_cu_locs_base Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_cu_locs_base Unexecuted instantiation: open.c:__libdw_cu_locs_base Unexecuted instantiation: image-header.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_frame.c:__libdw_cu_locs_base Unexecuted instantiation: frame_unwind.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_frame_pc.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_frame_regs.c:__libdw_cu_locs_base Unexecuted instantiation: gzip.c:__libdw_cu_locs_base Unexecuted instantiation: dwflst_process_tracker.c:__libdw_cu_locs_base Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_cu_locs_base Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_cu_locs_base Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_cu_locs_base Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_cu_locs_base Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_cu_locs_base Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_cu_locs_base Unexecuted instantiation: mips_retval.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_begin_elf.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_end.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_tag.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_error.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_attr.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_child.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_formudata.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_formref_die.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_siblingof.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_diecu.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_hasattr.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_bytesize.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_bitsize.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_formflag.c:__libdw_cu_locs_base Unexecuted instantiation: libdw_findcu.c:__libdw_cu_locs_base Unexecuted instantiation: libdw_form.c:__libdw_cu_locs_base Unexecuted instantiation: libdw_alloc.c:__libdw_cu_locs_base Unexecuted instantiation: frame-cache.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_frame_register.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_cfi_end.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_getalt.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_setalt.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_peel_type.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_cu_locs_base Unexecuted instantiation: libdw_find_split_unit.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_report_elf.c:__libdw_cu_locs_base Unexecuted instantiation: relocate.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_module_build_id.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_cu_locs_base Unexecuted instantiation: linux-proc-maps.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_addrmodule.c:__libdw_cu_locs_base Unexecuted instantiation: libdwfl_crc32.c:__libdw_cu_locs_base Unexecuted instantiation: elf-from-memory.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_cu_locs_base Unexecuted instantiation: linux-pid-attach.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_begin.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_getabbrev.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_nextcu.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_offdie.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_formstring.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_haschildren.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_formsdata.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_formref.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_srclang.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_getlocation.c:__libdw_cu_locs_base Unexecuted instantiation: fde.c:__libdw_cu_locs_base Unexecuted instantiation: cfi.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_getcfi.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_get_units.c:__libdw_cu_locs_base Unexecuted instantiation: segment.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_formaddr.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_lowpc.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_ranges.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_formblock.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_next_cfi.c:__libdw_cu_locs_base Unexecuted instantiation: cie.c:__libdw_cu_locs_base Unexecuted instantiation: dwarf_highpc.c:__libdw_cu_locs_base Unexecuted instantiation: core-file.c:__libdw_cu_locs_base Unexecuted instantiation: linux-core-attach.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_cu_locs_base Unexecuted instantiation: link_map.c:__libdw_cu_locs_base Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_cu_locs_base Unexecuted instantiation: derelocate.c:__libdw_cu_locs_base |
1498 | | |
1499 | | /* Helper function for tsearch/tfind split_tree Dwarf. */ |
1500 | | int __libdw_finddbg_cb (const void *arg1, const void *arg2); |
1501 | | |
1502 | | /* Link skeleton and split compile units. */ |
1503 | | static inline void |
1504 | | __libdw_link_skel_split (Dwarf_CU *skel, Dwarf_CU *split) |
1505 | 0 | { |
1506 | 0 | skel->split = split; |
1507 | 0 | split->split = skel; |
1508 | | |
1509 | | /* Get .debug_addr and addr_base greedy. |
1510 | | We also need it for the fake addr cu. |
1511 | | This needs to be done for each split unit (one per .dwo file, or multiple |
1512 | | per .dwp file). */ |
1513 | 0 | Dwarf *dbg = skel->dbg; |
1514 | 0 | Dwarf *sdbg = split->dbg; |
1515 | 0 | if (dbg->sectiondata[IDX_debug_addr] != NULL |
1516 | | /* If this split file hasn't been linked yet... */ |
1517 | 0 | && (sdbg->sectiondata[IDX_debug_addr] == NULL |
1518 | | /* ... or it was linked to the same skeleton file for another |
1519 | | unit... */ |
1520 | 0 | || (sdbg->sectiondata[IDX_debug_addr] |
1521 | 0 | == dbg->sectiondata[IDX_debug_addr]))) |
1522 | 0 | { |
1523 | | /* ... then link the address information for this file and unit. */ |
1524 | 0 | sdbg->sectiondata[IDX_debug_addr] |
1525 | 0 | = dbg->sectiondata[IDX_debug_addr]; |
1526 | 0 | split->addr_base = __libdw_cu_addr_base (skel); |
1527 | 0 | sdbg->fake_addr_cu = dbg->fake_addr_cu; |
1528 | 0 | } |
1529 | 0 | } Unexecuted instantiation: dwfl_begin.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_end.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_error.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_module.c:__libdw_link_skel_split Unexecuted instantiation: offline.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_module_getdwarf.c:__libdw_link_skel_split Unexecuted instantiation: find-debuginfo.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_build_id_find_debuginfo.c:__libdw_link_skel_split Unexecuted instantiation: libdwfl_crc32_file.c:__libdw_link_skel_split Unexecuted instantiation: open.c:__libdw_link_skel_split Unexecuted instantiation: image-header.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_frame.c:__libdw_link_skel_split Unexecuted instantiation: frame_unwind.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_frame_pc.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_frame_regs.c:__libdw_link_skel_split Unexecuted instantiation: gzip.c:__libdw_link_skel_split Unexecuted instantiation: dwflst_process_tracker.c:__libdw_link_skel_split Unexecuted instantiation: dwflst_tracker_find_elf.c:__libdw_link_skel_split Unexecuted instantiation: dwflst_tracker_elftab.c:__libdw_link_skel_split Unexecuted instantiation: dwflst_tracker_dwfltab.c:__libdw_link_skel_split Unexecuted instantiation: dwelf_elf_gnu_debuglink.c:__libdw_link_skel_split Unexecuted instantiation: dwelf_dwarf_gnu_debugaltlink.c:__libdw_link_skel_split Unexecuted instantiation: dwelf_elf_gnu_build_id.c:__libdw_link_skel_split Unexecuted instantiation: mips_retval.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_begin_elf.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_end.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_tag.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_error.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_attr.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_abbrev_hash.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_attr_integrate.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_hasattr_integrate.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_child.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_formudata.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_formref_die.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_siblingof.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_diecu.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_hasattr.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_bytesize.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_bitsize.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_formflag.c:__libdw_link_skel_split Unexecuted instantiation: libdw_findcu.c:__libdw_link_skel_split Unexecuted instantiation: libdw_form.c:__libdw_link_skel_split Unexecuted instantiation: libdw_alloc.c:__libdw_link_skel_split Unexecuted instantiation: frame-cache.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_frame_cfa.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_frame_register.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_cfi_addrframe.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_cfi_end.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_aggregate_size.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_getalt.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_setalt.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_peel_type.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_default_lower_bound.c:__libdw_link_skel_split Unexecuted instantiation: libdw_find_split_unit.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_cu_dwp_section_info.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_report_elf.c:__libdw_link_skel_split Unexecuted instantiation: relocate.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_module_build_id.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_build_id_find_elf.c:__libdw_link_skel_split Unexecuted instantiation: linux-proc-maps.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_addrmodule.c:__libdw_link_skel_split Unexecuted instantiation: libdwfl_crc32.c:__libdw_link_skel_split Unexecuted instantiation: elf-from-memory.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_module_dwarf_cfi.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_module_eh_cfi.c:__libdw_link_skel_split Unexecuted instantiation: linux-pid-attach.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_begin.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_getabbrev.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_nextcu.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_offdie.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_formstring.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_haschildren.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_formsdata.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_formref.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_srclang.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_getlocation.c:__libdw_link_skel_split Unexecuted instantiation: fde.c:__libdw_link_skel_split Unexecuted instantiation: cfi.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_getcfi.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_getcfi_elf.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_get_units.c:__libdw_link_skel_split Unexecuted instantiation: segment.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_formaddr.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_lowpc.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_ranges.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_formblock.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_next_cfi.c:__libdw_link_skel_split Unexecuted instantiation: cie.c:__libdw_link_skel_split Unexecuted instantiation: dwarf_highpc.c:__libdw_link_skel_split Unexecuted instantiation: core-file.c:__libdw_link_skel_split Unexecuted instantiation: linux-core-attach.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_segment_report_module.c:__libdw_link_skel_split Unexecuted instantiation: link_map.c:__libdw_link_skel_split Unexecuted instantiation: dwfl_module_report_build_id.c:__libdw_link_skel_split Unexecuted instantiation: derelocate.c:__libdw_link_skel_split |
1530 | | |
1531 | | |
1532 | | /* Given an address index for a CU return the address. |
1533 | | Returns -1 and sets libdw_errno if an error occurs. */ |
1534 | | int __libdw_addrx (Dwarf_CU *cu, Dwarf_Word idx, Dwarf_Addr *addr); |
1535 | | |
1536 | | |
1537 | | /* Helper function to set elfpath field in Dwarf, used from dwarf_begin_elf |
1538 | | and libdwfl process_file. */ |
1539 | | char * __libdw_elfpath (int fd); |
1540 | | |
1541 | | /* Helper function to set debugdir field in Dwarf after elfpath field has been |
1542 | | set. */ |
1543 | | void __libdw_set_debugdir (Dwarf *dbg); |
1544 | | |
1545 | | |
1546 | | /* Given the directory of a debug file, an absolute or relative dir |
1547 | | to look in, and file returns a full path. |
1548 | | |
1549 | | If the file is absolute (starts with a /) a copy of file is returned. |
1550 | | the file isn't absolute, but dir is absolute, then a path that is |
1551 | | the concatenation of dir and file is returned. If neither file, |
1552 | | nor dir is absolute, the path will be constructed using dir (if not |
1553 | | NULL) and file relative to the debugdir (if valid). |
1554 | | |
1555 | | The debugdir and the dir may be NULL (in which case they aren't used). |
1556 | | If file is NULL, or no full path can be constructed NULL is returned. |
1557 | | |
1558 | | The caller is responsible for freeing the result if not NULL. */ |
1559 | | char * __libdw_filepath (const char *debugdir, const char *dir, |
1560 | | const char *file) |
1561 | | internal_function; |
1562 | | |
1563 | | /* Like dwarf_getaranges but aranges are generated from CU address |
1564 | | ranges instead of being read from .debug_aranges. |
1565 | | |
1566 | | Returns 0 if successful and updates ARANGES and NARANGES. Otherwise |
1567 | | returns -1 and sets libdw_errno. |
1568 | | */ |
1569 | | int __libdw_getdieranges (Dwarf *dbg, Dwarf_Aranges **aranges, size_t *naranges); |
1570 | | #endif /* libdwP.h */ |