diff options
author | Rainer Schuetze <r.sagitario@gmx.de> | 2019-07-18 18:56:38 (GMT) |
---|---|---|
committer | Rainer Schuetze <r.sagitario@gmx.de> | 2019-07-18 18:56:38 (GMT) |
commit | 3239e14109ac416358e1962932fdd360e724beea (patch) | |
tree | 3358f665963297163fb5b67a29a5c230d95bd26b | |
parent | 3ed8409f81401c6c167ae15c32b11df5470611b6 (diff) | |
download | cv2pdb-3239e14109ac416358e1962932fdd360e724beea.zip cv2pdb-3239e14109ac416358e1962932fdd360e724beea.tar.gz cv2pdb-3239e14109ac416358e1962932fdd360e724beea.tar.bz2 |
DWARF: fix writing info for aggregates larger than 32kB
-rw-r--r-- | CHANGES | 6 | ||||
-rw-r--r-- | VERSION | 2 | ||||
-rw-r--r-- | src/cv2pdb.cpp | 8 |
3 files changed, 11 insertions, 5 deletions
@@ -287,3 +287,9 @@ unreleased Version 0.22 * always convert S_BPREL_V1 to S_BPREL_V3 (no longer supported by mspdb 14.16.27012/VS 15.9)
* emit "elemtype[keytype]" instead of "dAssocArray"
* DWARF: fixed converting unnamed structs/unions as part of other structs
+
+unreleased Version 0.46
+
+ * DWARF: fix writing info for aggregates larger than 32kB
+
+
@@ -1 +1 @@ -VERSION = 0.45
+VERSION = 0.46
diff --git a/src/cv2pdb.cpp b/src/cv2pdb.cpp index 86a8dca..9ac39f5 100644 --- a/src/cv2pdb.cpp +++ b/src/cv2pdb.cpp @@ -743,8 +743,8 @@ int CV2PDB::addAggregate(codeview_type* dtype, bool clss, int n_element, int fie dtype->struct_v2.property = property | (uniquename ? kPropUniquename : 0);
dtype->struct_v2.derived = derived;
dtype->struct_v2.vshape = vshape;
- dtype->struct_v2.structlen = structlen;
- int len = cstrcpy_v(v3, (BYTE*)(&dtype->struct_v2 + 1), name);
+ int len = write_numeric_leaf(structlen, &(dtype->struct_v2.structlen)) - 2;
+ len += cstrcpy_v(v3, (BYTE*)(&dtype->struct_v2 + 1) + len, name);
if(uniquename)
len += cstrcpy_v(v3, (BYTE*)(&dtype->struct_v2 + 1) + len, uniquename);
len += sizeof (dtype->struct_v2);
@@ -803,9 +803,9 @@ int CV2PDB::addFieldMember(codeview_fieldtype* dfieldtype, int attr, int offset, {
dfieldtype->member_v2.id = v3 ? LF_MEMBER_V3 : LF_MEMBER_V2;
dfieldtype->member_v2.attribute = attr;
- dfieldtype->member_v2.offset = offset;
dfieldtype->member_v2.type = translateType(type);
- int len = cstrcpy_v(v3, (BYTE*)(&dfieldtype->member_v2 + 1), name);
+ int len = write_numeric_leaf(offset, &(dfieldtype->member_v2.offset)) - 2;
+ len += cstrcpy_v(v3, (BYTE*)(&dfieldtype->member_v2 + 1) + len, name);
len += sizeof (dfieldtype->member_v2);
unsigned char* p = (unsigned char*) dfieldtype;
|