Skip to content

Commit 6057f9e

Browse files
pratikasharigcbot
authored andcommitted
Eliminate name length field restriction.
1 parent 7d4e0cc commit 6057f9e

9 files changed

+55
-45
lines changed

IGC/Compiler/CISACodeGen/CISABuilder.cpp

-8
Original file line numberDiff line numberDiff line change
@@ -4407,14 +4407,6 @@ namespace IGC
44074407
std::string asmName;
44084408
if (m_enableVISAdump || context->m_instrTypes.hasDebugInfo)
44094409
{
4410-
// vISA does not support string of length >= 255. Truncate if this exceeds
4411-
// the limit. Note that vISA may append an extension, so relax it to a
4412-
// random number 240 here.
4413-
const int MAX_VISA_STRING_LENGTH = 240;
4414-
if (kernelName.size() >= MAX_VISA_STRING_LENGTH)
4415-
{
4416-
kernelName.resize(MAX_VISA_STRING_LENGTH);
4417-
}
44184410
asmName = GetDumpFileName("asm");
44194411
}
44204412
else

IGC/DebugInfo/VISAIDebugEmitter.hpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ namespace IGC
376376
for (unsigned int i = 0; i != numCompiledObj; i++)
377377
{
378378
DbgInfoFormat f;
379-
uint8_t nameLen = read<uint8_t>(dbg);
379+
uint16_t nameLen = read<uint16_t>(dbg);
380380
for (unsigned int j = 0; j != nameLen; j++)
381381
f.kernelName += read<char>(dbg);
382382
f.relocOffset = read<uint32_t>(dbg);
@@ -405,7 +405,7 @@ namespace IGC
405405
{
406406
VarInfo v;
407407

408-
nameLen = read<uint8_t>(dbg);
408+
nameLen = read<uint16_t>(dbg);
409409
for (unsigned int k = 0; k != nameLen; k++)
410410
v.name += read<char>(dbg);
411411

@@ -424,7 +424,7 @@ namespace IGC
424424
for (unsigned int j = 0; j != count; j++)
425425
{
426426
SubroutineInfo sub;
427-
nameLen = read<uint8_t>(dbg);
427+
nameLen = read<uint16_t>(dbg);
428428
for (unsigned int k = 0; k != nameLen; k++)
429429
sub.name += read<char>(dbg);
430430

visa/BuildCISAIRImpl.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,6 @@ int CISA_IR_Builder::ClearAsmTextStreams()
346346

347347
int CISA_IR_Builder::AddKernel(VISAKernel *& kernel, const char* kernelName)
348348
{
349-
350349
if (kernel)
351350
{
352351
assert(0);
@@ -780,7 +779,9 @@ int CISA_IR_Builder::Compile(const char* nameInput, std::ostream* os, bool emit_
780779
kernel->getIRBuilder()->setRetVarSize(kernel->getKernelFormat()->return_value_size);
781780
}
782781

783-
strcpy_s((char*)&pseudoHeader.functions[k].name, COMMON_ISA_MAX_FILENAME_LENGTH, (*iter)->getKernel()->getName());
782+
auto nameLen = strlen((*iter)->getKernel()->getName()) + 1;
783+
pseudoHeader.functions[k].name = (char*)mem.alloc(nameLen);
784+
strcpy_s(pseudoHeader.functions[k].name, nameLen, (*iter)->getKernel()->getName());
784785
k++;
785786
}
786787

visa/Common_ISA.cpp

+20-4
Original file line numberDiff line numberDiff line change
@@ -374,9 +374,17 @@ int processCommonISAHeader(
374374
}
375375

376376
for (int i = 0; i < cisaHdr.num_kernels; i++) {
377-
READ_FIELD_FROM_BUF(cisaHdr.kernels[i].name_len, uint8_t);
377+
if (cisaHdr.major_version == 3 && cisaHdr.minor_version < 7)
378+
{
379+
READ_FIELD_FROM_BUF(cisaHdr.kernels[i].name_len, uint8_t);
380+
}
381+
else
382+
{
383+
READ_FIELD_FROM_BUF(cisaHdr.kernels[i].name_len, uint16_t);
384+
}
385+
cisaHdr.kernels[i].name = (char*)mem->alloc(cisaHdr.kernels[i].name_len + 1);
378386
memcpy_s(
379-
cisaHdr.kernels[i].name, COMMON_ISA_MAX_FILENAME_LENGTH, &buf[byte_pos],
387+
cisaHdr.kernels[i].name, cisaHdr.kernels[i].name_len * sizeof(uint8_t), &buf[byte_pos],
380388
cisaHdr.kernels[i].name_len * sizeof(uint8_t));
381389
cisaHdr.kernels[i].name[cisaHdr.kernels[i].name_len] = '\0';
382390
byte_pos += cisaHdr.kernels[i].name_len;
@@ -428,9 +436,17 @@ int processCommonISAHeader(
428436
// field is deprecated
429437
READ_FIELD_FROM_BUF(cisaHdr.functions[i].linkage, uint8_t);
430438

431-
READ_FIELD_FROM_BUF(cisaHdr.functions[i].name_len, uint8_t);
439+
if (cisaHdr.major_version == 3 && cisaHdr.minor_version < 7)
440+
{
441+
READ_FIELD_FROM_BUF(cisaHdr.functions[i].name_len, uint8_t);
442+
}
443+
else
444+
{
445+
READ_FIELD_FROM_BUF(cisaHdr.functions[i].name_len, uint16_t);
446+
}
447+
cisaHdr.functions[i].name = (char*)mem->alloc(cisaHdr.functions[i].name_len + 1);
432448
memcpy_s(
433-
cisaHdr.functions[i].name, COMMON_ISA_MAX_FILENAME_LENGTH, &buf[byte_pos],
449+
cisaHdr.functions[i].name, cisaHdr.functions[i].name_len * sizeof(uint8_t), &buf[byte_pos],
434450
cisaHdr.functions[i].name_len * sizeof(uint8_t));
435451
cisaHdr.functions[i].name[
436452
cisaHdr.functions[i].name_len] = '\0';

visa/Common_ISA.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class G4_Declare;
4545
#define COMMON_ISA_MAGIC_NUM 0x41534943
4646

4747
#define COMMON_ISA_MAJOR_VER 3
48-
#define COMMON_ISA_MINOR_VER 6
48+
#define COMMON_ISA_MINOR_VER 7
4949

5050
#define COMMON_ISA_MAX_ADDRESS_SIZE 16
5151
#define COMMON_ISA_MAX_SURFACE_SIZE 128
@@ -390,8 +390,8 @@ typedef struct {
390390
} gen_binary_info;
391391

392392
struct kernel_info_t {
393-
unsigned char name_len;
394-
char name[COMMON_ISA_MAX_FILENAME_LENGTH];
393+
unsigned short name_len;
394+
char* name;
395395
unsigned int offset;
396396
unsigned int size;
397397
unsigned int input_offset;
@@ -411,8 +411,8 @@ struct kernel_info_t {
411411

412412
struct function_info_t {
413413
unsigned char linkage;
414-
unsigned char name_len;
415-
char name[COMMON_ISA_MAX_FILENAME_LENGTH];
414+
unsigned short name_len;
415+
char* name;
416416
unsigned int offset;
417417
unsigned int size;
418418
reloc_symtab variable_reloc_symtab; // ded, but leave here to avoid breaking old vISA binary

visa/Common_ISA_framework.cpp

+10-14
Original file line numberDiff line numberDiff line change
@@ -169,11 +169,6 @@ void CisaBinary::initKernel(int kernelIndex, VISAKernelImpl * kernel)
169169

170170
int nameLen = (int) strlen(kernel->getName());
171171

172-
MUST_BE_TRUE(nameLen <= COMMON_ISA_MAX_FILENAME_LENGTH,
173-
"Kernel Name exceeds maximum length allowed.\n");
174-
175-
176-
177172
if (this->getMajorVersion())
178173
{
179174
if (kernel->getIsKernel())
@@ -187,8 +182,10 @@ void CisaBinary::initKernel(int kernelIndex, VISAKernelImpl * kernel)
187182

188183
if (kernel->getIsKernel())
189184
{
190-
m_header.kernels[kernelIndex].name_len = (unsigned char) nameLen;
191-
memcpy_s(&m_header.kernels[kernelIndex].name, COMMON_ISA_MAX_FILENAME_LENGTH, kernel->getName(), m_header.kernels[kernelIndex].name_len);
185+
m_header.kernels[kernelIndex].name_len = (unsigned short) nameLen;
186+
m_header.kernels[kernelIndex].name = (char*)m_mem.alloc(nameLen + 1);
187+
m_header.kernels[kernelIndex].name[nameLen] = 0;
188+
memcpy_s(m_header.kernels[kernelIndex].name, m_header.kernels[kernelIndex].name_len, kernel->getName(), m_header.kernels[kernelIndex].name_len);
192189

193190
m_header.kernels[kernelIndex].offset = 0; //will be set later during finalize
194191
m_header.kernels[kernelIndex].size = kernel->getCisaBinarySize();
@@ -211,9 +208,10 @@ void CisaBinary::initKernel(int kernelIndex, VISAKernelImpl * kernel)
211208
if (!kernel->getIsKernel())
212209
{
213210
m_header.functions[functionIndex].linkage = 0; // deprecated and MBZ
214-
m_header.functions[functionIndex].name_len = (unsigned char) nameLen;
215-
memcpy_s(&m_header.functions[functionIndex].name, COMMON_ISA_MAX_FILENAME_LENGTH, kernel->getName(), m_header.functions[functionIndex].name_len);
216-
211+
m_header.functions[functionIndex].name_len = (unsigned short) nameLen;
212+
m_header.functions[functionIndex].name = (char*)m_mem.alloc(nameLen + 1);
213+
memcpy_s(m_header.functions[functionIndex].name, m_header.functions[functionIndex].name_len, kernel->getName(), m_header.functions[functionIndex].name_len);
214+
m_header.functions[functionIndex].name[nameLen] = 0;
217215
m_header.functions[functionIndex].offset = 0; //will be set later during finalize
218216
m_header.functions[functionIndex].size = kernel->getCisaBinarySize();
219217
m_header.functions[functionIndex].cisa_binary_buffer = kernel->getCisaBinaryBuffer(); //buffer containing entire kernel
@@ -256,8 +254,7 @@ int CisaBinary::finalizeCisaBinary()
256254
for (int i = 0; i < m_header.num_kernels; i++)
257255
{
258256
writeInToCisaHeaderBuffer(&m_header.kernels[i].name_len, sizeof(m_header.kernels[i].name_len));
259-
260-
writeInToCisaHeaderBuffer(&m_header.kernels[i].name, m_header.kernels[i].name_len);
257+
writeInToCisaHeaderBuffer(m_header.kernels[i].name, m_header.kernels[i].name_len);
261258

262259
//setting offset to the compiled cisa binary kernel
263260
//to correct offset in final cisa binary
@@ -313,8 +310,7 @@ int CisaBinary::finalizeCisaBinary()
313310
{
314311
writeInToCisaHeaderBuffer(&m_header.functions[i].linkage, sizeof(m_header.functions[i].linkage));
315312
writeInToCisaHeaderBuffer(&m_header.functions[i].name_len, sizeof(m_header.functions[i].name_len));
316-
317-
writeInToCisaHeaderBuffer(&m_header.functions[i].name, m_header.functions[i].name_len);
313+
writeInToCisaHeaderBuffer(m_header.functions[i].name, m_header.functions[i].name_len);
318314

319315
//setting offset to the compiled cisa binary kernel
320316
//to correct offset in final cisa binary

visa/Common_ISA_util.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1126,7 +1126,7 @@ int vector_opnd::getSizeInBinary() const
11261126
/*
11271127
function_info {
11281128
ub linkage; // MBZ
1129-
ub name_len;
1129+
uw name_len;
11301130
ub name[name_len];
11311131
ud offset;
11321132
ud size;
@@ -1147,7 +1147,7 @@ uint32_t function_info_t::getSizeInBinary() const
11471147

11481148
/*
11491149
kernel_info {
1150-
ub name_len;
1150+
uw name_len;
11511151
ub name[name_len];
11521152
ud offset;
11531153
ud size;

visa/DebugInfo.cpp

+10-5
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,24 @@ int32_t get32BitSignedIntFrom31BitSignedInt(uint32_t data)
5959

6060
void DbgDecoder::ddName()
6161
{
62-
uint8_t nameLen;
63-
auto retval = fread(&nameLen, sizeof(uint8_t), 1, dbgFile);
62+
uint16_t nameLen;
63+
auto retval = fread(&nameLen, sizeof(uint16_t), 1, dbgFile);
6464
if (!retval)
6565
return;
6666

67-
char name[COMMON_ISA_MAX_KERNEL_NAME_LEN + 1];
67+
auto name = (char*)malloc(nameLen + 1);
6868
retval = fread(name, sizeof(uint8_t), nameLen, dbgFile);
6969
if (!retval)
70+
{
71+
free(name);
7072
return;
73+
}
7174

7275
name[nameLen] = 0;
7376

7477
std::cout << name;
78+
79+
free(name);
7580
}
7681

7782
template<class T>
@@ -962,9 +967,9 @@ uint32_t KernelDebugInfo::getVarIndex(G4_Declare* dcl)
962967
template<class T>
963968
void emitDataName(const char* name, T& t)
964969
{
965-
auto length = (uint8_t)strlen(name);
970+
auto length = (uint16_t)strlen(name);
966971
// Length
967-
insertData(&length, sizeof(uint8_t), t);
972+
insertData(&length, sizeof(uint16_t), t);
968973
// Actual name
969974
insertData(name, (uint32_t) (sizeof(uint8_t) * length), t);
970975
}

visa/DebugInfo.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ struct DebugFormatHeader
467467
468468
struct DebugInfoFormat
469469
{
470-
uint8_t kernelNameLen;
470+
uint16_t kernelNameLen;
471471
char kernelName[kernelNameLen];
472472
uint32_t reloc_offset; // 0 for kernel, non-zero for stack call functions
473473
@@ -540,7 +540,7 @@ struct CallFrameInfo
540540
541541
struct VarName
542542
{
543-
uint8_t varNameLen;
543+
uint16_t varNameLen;
544544
char varName[varNameLen];
545545
}
546546

0 commit comments

Comments
 (0)