diff options
author | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2007-02-21 19:32:02 +0000 |
---|---|---|
committer | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2007-02-21 19:32:02 +0000 |
commit | 87fe89deca2dc625c54baa83b6d1a5da0b8479eb (patch) | |
tree | 3f69d31df9fce801e282fe800c17f07130605640 | |
parent | 24e33fc2dd89d3887ab221b8cb04ea66e62d8ecc (diff) | |
download | fpc-87fe89deca2dc625c54baa83b6d1a5da0b8479eb.tar.gz |
Merged revisions 6589,6591 via svnmerge from
svn+ssh://jonas@svn.freepascal.org/FPC/svn/fpc/trunk
........
r6589 | jonas | 2007-02-21 20:07:45 +0100 (Wed, 21 Feb 2007) | 3 lines
* fixed dwarf definition of longstring (avoids endless loop in
gdb when loading ref_def for longstring)
........
r6591 | jonas | 2007-02-21 20:26:09 +0100 (Wed, 21 Feb 2007) | 3 lines
* make sure the size of tinterfaceentry is correct, regardless of
the maxrecordalign setting of the target
........
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/fpc_2_3@6592 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r-- | compiler/dbgdwarf.pas | 124 | ||||
-rw-r--r-- | rtl/inc/objpash.inc | 6 |
2 files changed, 66 insertions, 64 deletions
diff --git a/compiler/dbgdwarf.pas b/compiler/dbgdwarf.pas index 7bc6124b57..30f9acc4f0 100644 --- a/compiler/dbgdwarf.pas +++ b/compiler/dbgdwarf.pas @@ -1321,76 +1321,76 @@ implementation procedure TDebugInfoDwarf.appenddef_string(def:tstringdef); - var - slen : aint; - arr : tasmlabel; - begin - case def.stringtype of - st_shortstring: - begin - { fix length of openshortstring } - slen:=def.len; - if slen=0 then - slen:=255; - { create a structure with two elements } - if not(tf_dwarf_only_local_labels in target_info.flags) then - current_asmdata.getdatalabel(arr) - else - current_asmdata.getaddrlabel(arr); - append_entry(DW_TAG_structure_type,true,[ - DW_AT_name,DW_FORM_string,'ShortString'#0, - DW_AT_byte_size,DW_FORM_data1,2*sizeof(aint) - ]); - finish_entry; + procedure addnormalstringdef(const name: shortstring; lendef: tdef; maxlen: cardinal); + var + slen : aint; + arr : tasmlabel; + begin + { fix length of openshortstring } + slen:=def.len; + if slen=0 then + slen:=maxlen; - { length entry } - append_entry(DW_TAG_member,false,[ - DW_AT_name,DW_FORM_string,'Length'#0, - DW_AT_data_member_location,DW_FORM_block1,1+lengthuleb128(0) - ]); - current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_plus_uconst))); - current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_uleb128bit(0)); - append_labelentry_ref(DW_AT_type,def_dwarf_lab(u8inttype)); - finish_entry; + { create a structure with two elements } + if not(tf_dwarf_only_local_labels in target_info.flags) then + current_asmdata.getdatalabel(arr) + else + current_asmdata.getaddrlabel(arr); + append_entry(DW_TAG_structure_type,true,[ + DW_AT_name,DW_FORM_string,name+#0, + DW_AT_byte_size,DW_FORM_data1,2*sizeof(aint) + ]); + finish_entry; - { string data entry } - append_entry(DW_TAG_member,false,[ - DW_AT_name,DW_FORM_string,'Data'#0, - DW_AT_data_member_location,DW_FORM_block1,1+lengthuleb128(1) - ]); - current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_plus_uconst))); - current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_uleb128bit(1)); - append_labelentry_ref(DW_AT_type,arr); - finish_entry; + { length entry } + append_entry(DW_TAG_member,false,[ + DW_AT_name,DW_FORM_string,'Length'#0, + DW_AT_data_member_location,DW_FORM_block1,1+lengthuleb128(0) + ]); + current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_plus_uconst))); + current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_uleb128bit(0)); + append_labelentry_ref(DW_AT_type,def_dwarf_lab(lendef)); + finish_entry; + + { string data entry } + append_entry(DW_TAG_member,false,[ + DW_AT_name,DW_FORM_string,'Data'#0, + DW_AT_data_member_location,DW_FORM_block1,1+lengthuleb128(1) + ]); + current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_plus_uconst))); + current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_uleb128bit(lendef.size)); + append_labelentry_ref(DW_AT_type,arr); + finish_entry; - finish_children; + finish_children; - { now the data array } - current_asmdata.asmlists[al_dwarf_info].concat(tai_symbol.create(arr,0)); - append_entry(DW_TAG_array_type,true,[ - DW_AT_byte_size,DW_FORM_udata,def.size, - DW_AT_stride_size,DW_FORM_udata,1*8 - ]); - append_labelentry_ref(DW_AT_type,def_dwarf_lab(cchartype)); - finish_entry; - append_entry(DW_TAG_subrange_type,false,[ - DW_AT_lower_bound,DW_FORM_udata,0, - DW_AT_upper_bound,DW_FORM_udata,slen - ]); - append_labelentry_ref(DW_AT_type,def_dwarf_lab(u8inttype)); - finish_entry; - finish_children; + { now the data array } + current_asmdata.asmlists[al_dwarf_info].concat(tai_symbol.create(arr,0)); + append_entry(DW_TAG_array_type,true,[ + DW_AT_byte_size,DW_FORM_udata,def.size, + DW_AT_stride_size,DW_FORM_udata,1*8 + ]); + append_labelentry_ref(DW_AT_type,def_dwarf_lab(cchartype)); + finish_entry; + append_entry(DW_TAG_subrange_type,false,[ + DW_AT_lower_bound,DW_FORM_udata,0, + DW_AT_upper_bound,DW_FORM_udata,slen + ]); + append_labelentry_ref(DW_AT_type,def_dwarf_lab(lendef)); + finish_entry; + finish_children; + end; + + begin + case def.stringtype of + st_shortstring: + begin + addnormalstringdef('ShortString',u8inttype,255); end; st_longstring: begin - { - charst:=def_stab_number(cchartype); - bytest:=def_stab_number(u8inttype); - longst:=def_stab_number(u32inttype); - result:=def_stabstr_evaluate(def,'s$1length:$2,0,32;dummy:$6,32,8;st:ar$2;1;$3;$4,40,$5;;', - [tostr(def.len+5),longst,tostr(def.len),charst,tostr(def.len*8),bytest]); - } + addnormalstringdef('LongString',u32inttype,$ffffffff); end; st_ansistring: begin diff --git a/rtl/inc/objpash.inc b/rtl/inc/objpash.inc index 6c76047b33..37b8787e7e 100644 --- a/rtl/inc/objpash.inc +++ b/rtl/inc/objpash.inc @@ -124,7 +124,9 @@ VTable : Pointer; IOffset : PtrInt; IIDStr : pshortstring; { never nil. Com: upper(GuidToString(IID^)) } - IType : tinterfaceentrytype; + case boolean of + true : (IType : tinterfaceentrytype); + false : (__pad_dummy : pointer); end; pinterfacetable = ^tinterfacetable; @@ -344,4 +346,4 @@ end; var - DispCallByIDProc : pointer;
\ No newline at end of file + DispCallByIDProc : pointer; |