summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre-Marie de Rodat <derodat@adacore.com>2017-09-19 13:51:55 (GMT)
committerPierre-Marie de Rodat <derodat@adacore.com>2018-03-23 18:02:50 (GMT)
commite1129b2c08c9a2b9974f97e22d2851dcf358bc28 (patch)
treeb7bfd24008ce91ee6ff67239bc7a2d17bce39557
parent922fdb81e7fa99381226fa184f258e1647ab66eb (diff)
downloadcv2pdb-e1129b2c08c9a2b9974f97e22d2851dcf358bc28.zip
cv2pdb-e1129b2c08c9a2b9974f97e22d2851dcf358bc28.tar.gz
cv2pdb-e1129b2c08c9a2b9974f97e22d2851dcf358bc28.tar.bz2
Fix LF_ENUMERATE emission for values > 0x8000
-rw-r--r--src/cv2pdb.cpp16
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;
}