summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2007-02-21 19:32:02 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2007-02-21 19:32:02 +0000
commit87fe89deca2dc625c54baa83b6d1a5da0b8479eb (patch)
tree3f69d31df9fce801e282fe800c17f07130605640
parent24e33fc2dd89d3887ab221b8cb04ea66e62d8ecc (diff)
downloadfpc-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.pas124
-rw-r--r--rtl/inc/objpash.inc6
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;