== DWARF tasks & milestones == ==== testing note ==== All the early milestones (all we have so far) have a testing goal in terms of a pass/fail test on a single file. For each milestone, we'll consider it accomplished when the `single-file-test.sh` run of that test over all the DebugInfoTesting data has no failures. === tasks === 1. C++ interface (libdw reader front-end) 1. containers/iterators: CU, DIE, attrs * CU: iterable container of DIEs * DIE 1. iterable container of children 1. iterable container of attrs * attrs: dictionary of key(int)=>value * no values yet * container/iterator flavors: 1. raw pair iterator 1. dictionary w/o dup keys 1. hides sibling 1. '''Milestone:''' iterate full tree, see tags, attr names (int) * skeleton DwarfCmp, run self-to-self comparisons of .debug files 1. DebugInfoTesting `norel` set --- '''DONE (no FAIL) 2009-1-5''' 1. C++ interface for writer 1. template-compatible with reader iterators + writable 1. simple pure memory data structures for now 1. no attr values yet 1. deep-copy from reader trees via tempaltes 1. '''Milestone:''' copy input tree to writer data, apply comparator template widget to input * hacked DwarfCmp, input-to-writer comparisons of .debug files. 1. DebugInfoTesting `norel` set 1. attr value interfaces 1. background for design: DwarfValues 1. reader interfaces by value-space a. stubs for relocation details a. refine value class: e.g. src file name string 1. known-attribute map a. '''Milestone:''' DwarfLint checks for known attrs with expected class 1. DebugInfoTesting `norel` set 1. '''Milestone:''' DwarfCmp compares values 1. test without meaningful reference comparisons 1. DebugInfoTesting `norel` set 1. compatible writer interfaces a. simple pure memory data structures for now a. copy/initialize from reader counterpart a. xfrmers 1. src file name rewrite/collect 1. hashcons for dedup a. '''Milestone:''' hacked copying-DwarfCmp compares values 1. DebugInfoTesting `norel` set 1. relocatable values (see DwarfRelocs) 1. DwarfLint checks relocs a. .debug_info: r_offset+r_type match form there a. other sections 1. smart reader a. convert libdw parsers to use hooks for address/offset handling https://lists.fedorahosted.org/pipermail/elfutils-devel/2009-March/000208.html 1. hand-kludge test hooks that produce stderr output 1. hack/enhance dwarflint to emit similar line for each reloc 1. run e.g. dwarf-print or dwarfcmp to traverse data so as to pass all data through those hooks, get the output 1. compare dwarflint and libdw-emitted lists, make sure they match 1. '''Milestone:''' comparison matches a. self-test on build's own .o files a. DebugInfoTesting `rel` set 1. value interfaces for relocatable value classes a. `elfutils::symbolic_address` * `DW_FORM_addr` attributes * line info entries * ranges/aranges a. DWARF constant blocks with relocs in middle a. location expressions (`DW_OP_addr`) * until proper locexpr interface, treat as constant blocks 1. reloc generation a. common reloc-generation internals 1. `ebl_simple_reloc_type` reciprocal to choose `r_type`s a. hooks in all those value places a. hooks in all places producing `.debug_*` offsets 1. "final" and fully-relocatable options