Optimise WHERE operations on matching against strings by adding a new
function find_matching_rows to the views, which eliminates the need to
examine every record when executing a query. Implement this function
in the table using a hash table on the ID stored in the data.
- create an infrastructure for handling forward usage
of type records
- used it in some cases (pointer to yet not defined udt,
function signature, modifiers)
- seperate types' table handling from a single type handling
by adding codeview_parse_one_type function
- factored all calls for caching symt
- make type parsing helpers return the symt instead of a
simple error status
- no longer caching bitfield information but accessing it directly
when needed
- removed all kludges for bitfield handling
- reused BOOL parameter to codeview_get_type for monitoring
traces (will be used in later patches)
- now that we have offset tables to type, we can cleanly
parse the field-lists and remove the associated kludges
- also adding internal structure for easing parameter sharing
across functions (codeview_type_parse)
- in mscvpdb.h, also reparated the type records that are
referenced from other type records (union codeview_type_ref)
from type records referenced by symbols (union codeview_type)
- our engine for parsing types section now requires in entry
an offsets table for getting directly to each type in the
section
- (re)construct this table for PDB types
- in MSC debug info parsing, clearly separate a source file
information from a compiland (including in linetab structure)
- in ELF debug info parsing, now storing compiland directly
in symtab_elt while browsing the symtab section (we still
create twice the compilands, once in stabs/dwarf parsing,
a second time in symtab parsing)
A void return type is represented by a FC_END/FC_PAD sequence in the
proc format string. Increment the proc offset by two when a function
returns void.
- DBGHELP_NOLIVE env variable is tested earlier to avoid
some strange effects in live target detection
- in WineDbg, delete DBGHELP_NOLIVE before attaching to
a process, because we know it must be a live target