diff options
author | Pierre-Marie de Rodat <derodat@adacore.com> | 2017-09-19 13:51:55 (GMT) |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2018-03-23 18:02:50 (GMT) |
commit | e1129b2c08c9a2b9974f97e22d2851dcf358bc28 (patch) | |
tree | b7bfd24008ce91ee6ff67239bc7a2d17bce39557 | |
parent | 922fdb81e7fa99381226fa184f258e1647ab66eb (diff) | |
download | cv2pdb-e1129b2c08c9a2b9974f97e22d2851dcf358bc28.zip cv2pdb-e1129b2c08c9a2b9974f97e22d2851dcf358bc28.tar.gz cv2pdb-e1129b2c08c9a2b9974f97e22d2851dcf358bc28.tar.bz2 |
Fix LF_ENUMERATE emission for values > 0x8000
-rw-r--r-- | src/cv2pdb.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/cv2pdb.cpp b/src/cv2pdb.cpp index d84eeb2..b14a0d0 100644 --- a/src/cv2pdb.cpp +++ b/src/cv2pdb.cpp @@ -843,16 +843,20 @@ int CV2PDB::addFieldNestedType(codeview_fieldtype* dfieldtype, int type, const c int CV2PDB::addFieldEnumerate(codeview_fieldtype* dfieldtype, const char* name, int val)
{
+ int len = 0;
+ BYTE *buffer = (BYTE*)dfieldtype;
+
dfieldtype->enumerate_v1.id = v3 ? LF_ENUMERATE_V3 : LF_ENUMERATE_V1;
dfieldtype->enumerate_v1.attribute = 0;
- //assert(val < LF_NUMERIC);
- dfieldtype->enumerate_v1.value = val;
- int len = cstrcpy_v(v3, (BYTE*)(&dfieldtype->enumerate_v1 + 1), name);
- len += sizeof (dfieldtype->enumerate_v1);
+ len += 4;
- unsigned char* p = (unsigned char*) dfieldtype;
+ // Append the enumerator value, and then its name
+ len += write_numeric_leaf(val, buffer + len);
+ len += cstrcpy_v(v3, buffer + len, name);
+
+ // Add padding so that the next record is properly aligned
for (; len & 3; len++)
- p[len] = 0xf4 - (len & 3);
+ buffer[len] = 0xf4 - (len & 3);
return len;
}
|