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