Skip to content

Commit 3e8a668

Browse files
Allow undefined symbols in symbol table for OCL
Related-To: NEO-5081 Signed-off-by: Mateusz Jablonski <[email protected]>
1 parent 038d1d5 commit 3e8a668

File tree

6 files changed

+5
-32
lines changed

6 files changed

+5
-32
lines changed

level_zero/core/source/module/module_imp.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,6 @@ bool ModuleTranslationUnit::processUnpackedBinary() {
300300

301301
NEO::DecodeError decodeError;
302302
NEO::DeviceBinaryFormat singleDeviceBinaryFormat;
303-
programInfo.levelZeroDynamicLinkProgram = true;
304303
std::tie(decodeError, singleDeviceBinaryFormat) = NEO::decodeSingleDeviceBinary(programInfo, binary, decodeErrors, decodeWarnings);
305304
if (decodeWarnings.empty() == false) {
306305
PRINT_DEBUG_STRING(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "%s\n", decodeWarnings.c_str());
@@ -320,7 +319,6 @@ bool ModuleTranslationUnit::processUnpackedBinary() {
320319
id++;
321320
}
322321
programInfo.prepareLinkerInputStorage();
323-
programInfo.linkerInput->undefinedSymbolsAllowed = programInfo.levelZeroDynamicLinkProgram;
324322
programInfo.linkerInput->decodeElfSymbolTableAndRelocations(programInfo.decodedElf, nameToKernelId);
325323
}
326324

shared/source/compiler_interface/linker.cpp

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,8 @@ bool LinkerInput::decodeExportedFunctionsSymbolTable(const void *data, uint32_t
8282
this->valid = false;
8383
return false;
8484
case vISA::S_UNDEF:
85-
if (this->undefinedSymbolsAllowed) {
86-
symbols.erase(symbolEntryIt->s_name);
87-
break;
88-
} else {
89-
DEBUG_BREAK_IF(true);
90-
this->valid = false;
91-
return false;
92-
}
85+
symbols.erase(symbolEntryIt->s_name);
86+
break;
9387
case vISA::S_GLOBAL_VAR:
9488
symbolInfo.segment = SegmentType::GlobalVariables;
9589
traits.exportsGlobalVariables = true;
@@ -195,8 +189,7 @@ void LinkerInput::decodeElfSymbolTableAndRelocations(Elf::Elf<Elf::EI_CLASS_64>
195189

196190
switch (type) {
197191
default:
198-
this->valid &= this->undefinedSymbolsAllowed;
199-
DEBUG_BREAK_IF(false == this->undefinedSymbolsAllowed);
192+
DEBUG_BREAK_IF(type != Elf::SYMBOL_TABLE_TYPE::STT_NOTYPE);
200193
continue;
201194
case Elf::SYMBOL_TABLE_TYPE::STT_OBJECT:
202195
symbolInfo.segment = symbolSegment;
@@ -565,4 +558,4 @@ void Linker::resolveBuiltins(Device *pDevice, UnresolvedExternals &outUnresolved
565558
}
566559
}
567560
}
568-
} // namespace NEO
561+
} // namespace NEO

shared/source/compiler_interface/linker.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,6 @@ struct LinkerInput {
147147
return valid;
148148
}
149149

150-
bool undefinedSymbolsAllowed = false;
151-
152150
const std::vector<ExternalFunctionUsageKernel> &getKernelDependencies() const {
153151
return kernelDependencies;
154152
}

shared/source/program/program_info.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ struct ProgramInfo {
4747
std::vector<KernelInfo *> kernelInfos;
4848
Elf::Elf<Elf::EI_CLASS_64> decodedElf;
4949
uint32_t grfSize = 32U;
50-
bool levelZeroDynamicLinkProgram = false;
5150
};
5251

5352
size_t getMaxInlineSlmNeeded(const ProgramInfo &programInfo);

shared/source/program/program_info_from_patchtokens.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ void populateSingleKernelInfo(ProgramInfo &dst, const PatchTokenBinary::ProgramF
3535

3636
if (decodedKernel.tokens.programSymbolTable) {
3737
dst.prepareLinkerInputStorage();
38-
dst.linkerInput->undefinedSymbolsAllowed = dst.levelZeroDynamicLinkProgram;
3938
dst.linkerInput->decodeExportedFunctionsSymbolTable(decodedKernel.tokens.programSymbolTable + 1, decodedKernel.tokens.programSymbolTable->NumEntries, kernelNum);
4039
}
4140

shared/test/unit_test/compiler_interface/linker_tests.cpp

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -189,28 +189,14 @@ TEST(LinkerInputTests, givenFunctionsSymbolTableThenProperlyDecodesExportedFunct
189189
EXPECT_EQ(3, linkerInput.getExportedFunctionsSegmentId());
190190
}
191191

192-
TEST(LinkerInputTests, givenFunctionsSymbolTableThenUndefIsNotAllowed) {
192+
TEST(LinkerInputTests, givenFunctionsSymbolTableThenUndefIsAllowed) {
193193
NEO::LinkerInput linkerInput;
194194
vISA::GenSymEntry entry = {};
195195
entry.s_name[0] = 'A';
196196
entry.s_offset = 8;
197197
entry.s_size = 16;
198198
entry.s_type = vISA::GenSymType::S_UNDEF;
199199

200-
auto decodeResult = linkerInput.decodeExportedFunctionsSymbolTable(&entry, 1, 3);
201-
EXPECT_FALSE(decodeResult);
202-
EXPECT_FALSE(linkerInput.isValid());
203-
}
204-
205-
TEST(LinkerInputTests, givenFunctionsSymbolTableWithAllowUndefinedSymbolsThenUndefIsAllowed) {
206-
NEO::LinkerInput linkerInput;
207-
vISA::GenSymEntry entry = {};
208-
entry.s_name[0] = 'A';
209-
entry.s_offset = 8;
210-
entry.s_size = 16;
211-
entry.s_type = vISA::GenSymType::S_UNDEF;
212-
linkerInput.undefinedSymbolsAllowed = true;
213-
214200
auto decodeResult = linkerInput.decodeExportedFunctionsSymbolTable(&entry, 1, 3);
215201
EXPECT_TRUE(decodeResult);
216202
EXPECT_TRUE(linkerInput.isValid());

0 commit comments

Comments
 (0)