forked from OSchip/llvm-project
[CodeView] Allow variable names to be as long as the codeview format supports
Instead of reserving 0xF00 bytes for the fixed length portion of the CodeView symbol name, calculate the actual length of the fixed length portion. Differential Revision: https://reviews.llvm.org/D42125 llvm-svn: 324850
This commit is contained in:
parent
9ead7bb3d4
commit
19e17b3970
|
@ -501,12 +501,12 @@ void CodeViewDebug::endModule() {
|
|||
clear();
|
||||
}
|
||||
|
||||
static void emitNullTerminatedSymbolName(MCStreamer &OS, StringRef S) {
|
||||
static void emitNullTerminatedSymbolName(MCStreamer &OS, StringRef S,
|
||||
unsigned MaxFixedRecordLength = 0xF00) {
|
||||
// The maximum CV record length is 0xFF00. Most of the strings we emit appear
|
||||
// after a fixed length portion of the record. The fixed length portion should
|
||||
// always be less than 0xF00 (3840) bytes, so truncate the string so that the
|
||||
// overall record size is less than the maximum allowed.
|
||||
unsigned MaxFixedRecordLength = 0xF00;
|
||||
SmallString<32> NullTerminatedString(
|
||||
S.take_front(MaxRecordLength - MaxFixedRecordLength - 1));
|
||||
NullTerminatedString.push_back('\0');
|
||||
|
@ -2448,6 +2448,7 @@ void CodeViewDebug::emitDebugInfoForGlobal(const DIGlobalVariable *DIGV,
|
|||
// FIXME: Thread local data, etc
|
||||
MCSymbol *DataBegin = MMI->getContext().createTempSymbol(),
|
||||
*DataEnd = MMI->getContext().createTempSymbol();
|
||||
const unsigned FixedLengthOfThisRecord = 12;
|
||||
OS.AddComment("Record length");
|
||||
OS.emitAbsoluteSymbolDiff(DataEnd, DataBegin, 2);
|
||||
OS.EmitLabel(DataBegin);
|
||||
|
@ -2475,6 +2476,6 @@ void CodeViewDebug::emitDebugInfoForGlobal(const DIGlobalVariable *DIGV,
|
|||
OS.AddComment("Segment");
|
||||
OS.EmitCOFFSectionIndex(GVSym);
|
||||
OS.AddComment("Name");
|
||||
emitNullTerminatedSymbolName(OS, DIGV->getName());
|
||||
emitNullTerminatedSymbolName(OS, DIGV->getName(), FixedLengthOfThisRecord);
|
||||
OS.EmitLabel(DataEnd);
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue