This patch solves a couple intertwined problems relating to tracepoint collection of C++ classes with static fields. First, it adds recognition of variables (including static fields) whose location expressions indicate that they have been optimized out. Second, to collect an instance of a class with static fields, we need to issue more bytecodes, since static fields are stored at their own addresses, separately from the instance. The two are intertwined because when collecting the instance, we want to silently pass over any optimized-out static fields instead of error()ing out. (And believe it or not, all this was motivated by tracepoints choking on actual user code...) Stan 2010-03-17 Stan Shebs * ax-gdb.h (struct axs_value): New field optimized_out. (gen_trace_for_var): Add gdbarch argument. * ax-gdb.c (gen_trace_static_fields): New function. (gen_traced_pop): Call it, add gdbarch argument. (gen_trace_for_expr): Update call to it. (gen_trace_for_var): Ditto, and report optimized-out variables. (gen_struct_ref_recursive): Check for optimized-out value. (gen_struct_elt_for_reference): Ditto. (gen_static_field): Pass gdbarch instead of expression, assume optimization if field not found. (gen_var_ref): Set the optimized_out flag. (gen_expr): Error on optimized-out variable. * tracepoint.c (collect_symbol): Handle struct-valued vars as expressions, skip optimized-out variables with computed locations. * dwarf2loc.c (dwarf2_tracepoint_var_ref): Flag instead of erroring out if location expression missing. (loclist_tracepoint_var_ref): Don't error out here.