Skip to content
  • Sanimir Agovic's avatar
    type: add c99 variable length array support · 80180f79
    Sanimir Agovic authored
    The dwarf standard allow certain attributes to be expressed as dwarf
    expressions rather than constants. For instance upper-/lowerbound attributes.
    In case of a c99 variable length array the upperbound is a dynamic attribute.
    
    With this change c99 vla behave the same as with static arrays.
    
    1| void foo (size_t n) {
    2|   int ary[n];
    3|   memset(ary, 0, sizeof(ary));
    4| }
    
    (gdb) print ary
    $1 = {0 <repeats 42 times>}
    
    gdb/ChangeLog:
    
    	* dwarf2loc.c (dwarf2_locexpr_baton_eval): New function.
    	(dwarf2_evaluate_property): New function.
    	* dwarf2loc.h (dwarf2_evaluate_property): New function prototype.
    	* dwarf2read.c (attr_to_dynamic_prop): New function.
    	(read_subrange_type): Use attr_to_dynamic_prop to read high bound
    	attribute.
    	* gdbtypes.c: Include dwarf2loc.h.
    	(is_dynamic_type): New function.
    	(resolve_dynamic_type): New function.
    	(resolve_dynamic_bounds): New function.
    	(get_type_length): New function.
    	(check_typedef): Use get_type_length to compute type length.
    	* gdbtypes.h (TYPE_HIGH_BOUND_KIND): New macro.
    	(TYPE_LOW_BOUND_KIND): New macro.
    	(is_dynamic_type): New function prototype.
    	* value.c (value_from_contents_and_address): Call resolve_dynamic_type
    	to resolve dynamic properties of the type. Update comment.
    	* valops.c (get_value_at, value_at, value_at_lazy): Update comment.
    80180f79