* Renamed DW_AT_stride to DW_AT_byte_stride, DWARF-3 compatible

* Use DW_AT_byte_stride when possible, because gdb does not support DW_AT_stride_size
 * Add stride to dynamic-array definitions

git-svn-id: trunk@13280 -
This commit is contained in:
joost 2009-06-15 14:47:28 +00:00
parent 5f13f1873f
commit 75eaa2cddf

View File

@ -137,7 +137,7 @@ interface
{ DWARF 3 values. } { DWARF 3 values. }
DW_AT_allocated := $4e,DW_AT_associated := $4f, DW_AT_allocated := $4e,DW_AT_associated := $4f,
DW_AT_data_location := $50,DW_AT_stride := $51, DW_AT_data_location := $50,DW_AT_byte_stride := $51,
DW_AT_entry_pc := $52,DW_AT_use_UTF8 := $53, DW_AT_entry_pc := $52,DW_AT_use_UTF8 := $53,
DW_AT_extension := $54,DW_AT_ranges := $55, DW_AT_extension := $54,DW_AT_ranges := $55,
DW_AT_trampoline := $56,DW_AT_call_column := $57, DW_AT_trampoline := $56,DW_AT_call_column := $57,
@ -1327,6 +1327,7 @@ implementation
var var
size : aint; size : aint;
elesize : aint; elesize : aint;
elestrideattr : tdwarf_attribute;
labsym: tasmlabel; labsym: tasmlabel;
begin begin
if is_dynamic_array(def) then if is_dynamic_array(def) then
@ -1340,9 +1341,15 @@ implementation
end; end;
if not is_packed_array(def) then if not is_packed_array(def) then
elesize := def.elesize*8 begin
elestrideattr := DW_AT_byte_stride;
elesize := def.elesize;
end
else else
begin
elestrideattr := DW_AT_stride_size;
elesize := def.elepackedbitsize; elesize := def.elepackedbitsize;
end;
if is_special_array(def) then if is_special_array(def) then
begin begin
@ -1350,11 +1357,11 @@ implementation
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_array_type,true,[ append_entry(DW_TAG_array_type,true,[
DW_AT_name,DW_FORM_string,symname(def.typesym)+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_stride_size,DW_FORM_udata,elesize elestrideattr,DW_FORM_udata,elesize
]) ])
else else
append_entry(DW_TAG_array_type,true,[ append_entry(DW_TAG_array_type,true,[
DW_AT_stride_size,DW_FORM_udata,elesize elestrideattr,DW_FORM_udata,elesize
]); ]);
append_labelentry_ref(DW_AT_type,def_dwarf_lab(def.elementdef)); append_labelentry_ref(DW_AT_type,def_dwarf_lab(def.elementdef));
finish_entry; finish_entry;
@ -1370,12 +1377,12 @@ implementation
append_entry(DW_TAG_array_type,true,[ append_entry(DW_TAG_array_type,true,[
DW_AT_name,DW_FORM_string,symname(def.typesym)+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_byte_size,DW_FORM_udata,size, DW_AT_byte_size,DW_FORM_udata,size,
DW_AT_stride_size,DW_FORM_udata,elesize elestrideattr,DW_FORM_udata,elesize
]) ])
else else
append_entry(DW_TAG_array_type,true,[ append_entry(DW_TAG_array_type,true,[
DW_AT_byte_size,DW_FORM_udata,size, DW_AT_byte_size,DW_FORM_udata,size,
DW_AT_stride_size,DW_FORM_udata,elesize elestrideattr,DW_FORM_udata,elesize
]); ]);
append_labelentry_ref(DW_AT_type,def_dwarf_lab(def.elementdef)); append_labelentry_ref(DW_AT_type,def_dwarf_lab(def.elementdef));
finish_entry; finish_entry;
@ -1467,7 +1474,7 @@ implementation
current_asmdata.asmlists[al_dwarf_info].concat(tai_symbol.create(arr,0)); current_asmdata.asmlists[al_dwarf_info].concat(tai_symbol.create(arr,0));
append_entry(DW_TAG_array_type,true,[ append_entry(DW_TAG_array_type,true,[
DW_AT_byte_size,DW_FORM_udata,def.size, DW_AT_byte_size,DW_FORM_udata,def.size,
DW_AT_stride_size,DW_FORM_udata,1*8 DW_AT_byte_stride,DW_FORM_udata,1
]); ]);
append_labelentry_ref(DW_AT_type,def_dwarf_lab(cchartype)); append_labelentry_ref(DW_AT_type,def_dwarf_lab(cchartype));
finish_entry; finish_entry;
@ -3130,6 +3137,7 @@ implementation
finish_entry; finish_entry;
{ to simplify things, we don't write a multidimensional array here } { to simplify things, we don't write a multidimensional array here }
append_entry(DW_TAG_subrange_type,false,[ append_entry(DW_TAG_subrange_type,false,[
DW_AT_byte_stride,DW_FORM_udata,def.elesize,
DW_AT_lower_bound,DW_FORM_udata,0, DW_AT_lower_bound,DW_FORM_udata,0,
DW_AT_upper_bound,DW_FORM_block1,5 DW_AT_upper_bound,DW_FORM_block1,5
]); ]);