1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownOn 4 Apr 06, the debuginfo reader (m_debuginfo) was majorly cleaned up
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownand restructured.  It has been a bit of a tangle for a while.  The new
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstructure looks like this:
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                  debuginfo.c 
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                   readelf.c
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        readdwarf.c        readstabs.c
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                   storage.c
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownEach .c can only call those below it on the page.
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstorage.c contains the SegInfo structure and stuff for 
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownmaintaining/searching arrays of symbols, line-numbers, and Dwarf CF 
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browninfo records.
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownreaddwarf.c and readstabs.c parse the relevant kind of info and 
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browncall storage.c to store the results.
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownreadelf.c reads ELF format, hands syms directly to storage.c,
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownthen delegates to readdwarf.c/readstabs.c for debug info.  All 
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstraightforward.
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browndebuginfo.c is the top-level file, and is quite small.
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownThere are 3 goals to this:
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown(1) Generally tidy up something which needs tidying up
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown(2) Introduce more modularity, so as to make it easier to add
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    readers for other formats, if needed
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown(3) Simplify the stabs reader.
37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownRationale for (1) and (2) are obvious.
39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownRe (3), the stabs reader has for a good year contained a sophisticated
41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownand impressive parser for stabs strings, with the aim of recording in 
42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browndetail the types of variables (I think) (Jeremy's work).  Unfortunately 
43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownthat has caused various segfaults reading stabs info in the past few months
44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown(#77869, #117936, #119914, #120345 and another to do with deeply nested
45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntemplate types).
46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownThe worst thing is that it is the stabs type reader that is crashing,
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownnot the stabs line-number reader, but the type info is only used by
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownHelgrind, which is looking pretty dead at the moment.  So I have lifed
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownout the type-reader code and put it in UNUSED_STABS.txt for safe
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstorage, just leaving the line-number reader in place.
52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownIf Helgrind ever does come back to life we will need to reinstate the
54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntype storage/reader stuff but with DWARF as its primary target.
55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownPlacing the existing stabs type-reader in hibernation improves
56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstability whilst retaining the development effort/expertise that went
57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browninto it for possible future reinstatement.
58