|
7 | 7 |
|
8 | 8 | #include "shared/source/device_binary_format/patchtokens_decoder.h" |
9 | 9 | #include "shared/source/kernel/kernel_descriptor_from_patchtokens.h" |
| 10 | +#include "shared/test/common/mocks/mock_elf.h" |
10 | 11 |
|
11 | 12 | #include "opencl/source/program/kernel_info.h" |
12 | 13 | #include "opencl/source/program/kernel_info_from_patchtokens.h" |
@@ -106,6 +107,140 @@ TEST_F(DeviceWithDebuggerEnabledTest, GivenNonDebuggeableKernelWhenModuleIsIniti |
106 | 107 | EXPECT_FALSE(module->isDebugEnabled()); |
107 | 108 | } |
108 | 109 |
|
| 110 | +using ModuleWithSLDTest = Test<ModuleFixture>; |
| 111 | + |
| 112 | +TEST_F(ModuleWithSLDTest, GivenNoDebugDataWhenInitializingModuleThenRelocatedDebugDataIsNotCreated) { |
| 113 | + auto cip = new NEO::MockCompilerInterfaceCaptureBuildOptions(); |
| 114 | + neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[device->getRootDeviceIndex()]->compilerInterface.reset(cip); |
| 115 | + auto debugger = new MockActiveSourceLevelDebugger(new MockOsLibrary); |
| 116 | + neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->debugger.reset(debugger); |
| 117 | + |
| 118 | + uint8_t binary[10]; |
| 119 | + ze_module_desc_t moduleDesc = {}; |
| 120 | + moduleDesc.format = ZE_MODULE_FORMAT_IL_SPIRV; |
| 121 | + moduleDesc.pInputModule = binary; |
| 122 | + moduleDesc.inputSize = 10; |
| 123 | + ModuleBuildLog *moduleBuildLog = nullptr; |
| 124 | + |
| 125 | + std::unique_ptr<MockModule> module = std::make_unique<MockModule>(device, |
| 126 | + moduleBuildLog, |
| 127 | + ModuleType::User); |
| 128 | + module->translationUnit = std::make_unique<MockModuleTranslationUnit>(device); |
| 129 | + |
| 130 | + uint32_t kernelHeap = 0; |
| 131 | + auto kernelInfo = new KernelInfo(); |
| 132 | + kernelInfo->heapInfo.KernelHeapSize = 1; |
| 133 | + kernelInfo->heapInfo.pKernelHeap = &kernelHeap; |
| 134 | + |
| 135 | + Mock<::L0::Kernel> kernel; |
| 136 | + kernel.module = module.get(); |
| 137 | + kernel.immutableData.kernelInfo = kernelInfo; |
| 138 | + |
| 139 | + kernel.immutableData.surfaceStateHeapSize = 64; |
| 140 | + kernel.immutableData.surfaceStateHeapTemplate.reset(new uint8_t[64]); |
| 141 | + kernelInfo->kernelDescriptor.payloadMappings.implicitArgs.systemThreadSurfaceAddress.bindful = 0; |
| 142 | + |
| 143 | + module->kernelImmData = &kernel.immutableData; |
| 144 | + module->translationUnit->programInfo.kernelInfos.push_back(kernelInfo); |
| 145 | + |
| 146 | + EXPECT_EQ(nullptr, module->translationUnit->debugData.get()); |
| 147 | + auto result = module->initialize(&moduleDesc, neoDevice); |
| 148 | + EXPECT_TRUE(result); |
| 149 | + |
| 150 | + EXPECT_EQ(nullptr, kernelInfo->kernelDescriptor.external.relocatedDebugData); |
| 151 | +} |
| 152 | + |
| 153 | +TEST_F(ModuleWithSLDTest, GivenDebugDataWithSingleRelocationWhenInitializingModuleThenRelocatedDebugDataIsNotCreated) { |
| 154 | + auto cip = new NEO::MockCompilerInterfaceCaptureBuildOptions(); |
| 155 | + neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[device->getRootDeviceIndex()]->compilerInterface.reset(cip); |
| 156 | + auto debugger = new MockActiveSourceLevelDebugger(new MockOsLibrary); |
| 157 | + neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->debugger.reset(debugger); |
| 158 | + |
| 159 | + createKernel(); |
| 160 | + |
| 161 | + uint8_t binary[10]; |
| 162 | + ze_module_desc_t moduleDesc = {}; |
| 163 | + moduleDesc.format = ZE_MODULE_FORMAT_IL_SPIRV; |
| 164 | + moduleDesc.pInputModule = binary; |
| 165 | + moduleDesc.inputSize = 10; |
| 166 | + ModuleBuildLog *moduleBuildLog = nullptr; |
| 167 | + |
| 168 | + std::unique_ptr<MockModule> moduleMock = std::make_unique<MockModule>(device, moduleBuildLog, ModuleType::User); |
| 169 | + moduleMock->translationUnit = std::make_unique<MockModuleTranslationUnit>(device); |
| 170 | + |
| 171 | + uint32_t kernelHeap = 0; |
| 172 | + auto kernelInfo = new KernelInfo(); |
| 173 | + kernelInfo->heapInfo.KernelHeapSize = 1; |
| 174 | + kernelInfo->heapInfo.pKernelHeap = &kernelHeap; |
| 175 | + |
| 176 | + Mock<::L0::Kernel> kernelMock; |
| 177 | + kernelMock.module = moduleMock.get(); |
| 178 | + kernelMock.immutableData.kernelInfo = kernelInfo; |
| 179 | + |
| 180 | + kernelMock.immutableData.surfaceStateHeapSize = 64; |
| 181 | + kernelMock.immutableData.surfaceStateHeapTemplate.reset(new uint8_t[64]); |
| 182 | + kernelInfo->kernelDescriptor.payloadMappings.implicitArgs.systemThreadSurfaceAddress.bindful = 0; |
| 183 | + |
| 184 | + moduleMock->kernelImmData = &kernelMock.immutableData; |
| 185 | + moduleMock->translationUnit->programInfo.kernelInfos.push_back(kernelInfo); |
| 186 | + |
| 187 | + kernelInfo->kernelDescriptor.external.debugData = std::make_unique<NEO::DebugData>(); |
| 188 | + kernelInfo->kernelDescriptor.external.debugData->vIsa = kernel->getKernelDescriptor().external.debugData->vIsa; |
| 189 | + kernelInfo->kernelDescriptor.external.debugData->vIsaSize = kernel->getKernelDescriptor().external.debugData->vIsaSize; |
| 190 | + kernelInfo->kernelDescriptor.external.debugData->genIsa = nullptr; |
| 191 | + kernelInfo->kernelDescriptor.external.debugData->genIsaSize = 0; |
| 192 | + |
| 193 | + auto result = moduleMock->initialize(&moduleDesc, neoDevice); |
| 194 | + EXPECT_TRUE(result); |
| 195 | + |
| 196 | + EXPECT_EQ(nullptr, kernelInfo->kernelDescriptor.external.relocatedDebugData); |
| 197 | +} |
| 198 | + |
| 199 | +TEST_F(ModuleWithSLDTest, GivenDebugDataWithMultipleRelocationsWhenInitializingModuleThenRelocatedDebugDataIsCreated) { |
| 200 | + auto cip = new NEO::MockCompilerInterfaceCaptureBuildOptions(); |
| 201 | + neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[device->getRootDeviceIndex()]->compilerInterface.reset(cip); |
| 202 | + auto debugger = new MockActiveSourceLevelDebugger(new MockOsLibrary); |
| 203 | + neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->debugger.reset(debugger); |
| 204 | + |
| 205 | + uint8_t binary[10]; |
| 206 | + ze_module_desc_t moduleDesc = {}; |
| 207 | + moduleDesc.format = ZE_MODULE_FORMAT_IL_SPIRV; |
| 208 | + moduleDesc.pInputModule = binary; |
| 209 | + moduleDesc.inputSize = 10; |
| 210 | + ModuleBuildLog *moduleBuildLog = nullptr; |
| 211 | + |
| 212 | + std::unique_ptr<MockModule> moduleMock = std::make_unique<MockModule>(device, moduleBuildLog, ModuleType::User); |
| 213 | + moduleMock->translationUnit = std::make_unique<MockModuleTranslationUnit>(device); |
| 214 | + |
| 215 | + uint32_t kernelHeap = 0; |
| 216 | + auto kernelInfo = new KernelInfo(); |
| 217 | + kernelInfo->heapInfo.KernelHeapSize = 1; |
| 218 | + kernelInfo->heapInfo.pKernelHeap = &kernelHeap; |
| 219 | + |
| 220 | + Mock<::L0::Kernel> kernelMock; |
| 221 | + kernelMock.module = moduleMock.get(); |
| 222 | + kernelMock.immutableData.kernelInfo = kernelInfo; |
| 223 | + kernelInfo->kernelDescriptor.payloadMappings.implicitArgs.systemThreadSurfaceAddress.bindful = 0; |
| 224 | + |
| 225 | + moduleMock->kernelImmData = &kernelMock.immutableData; |
| 226 | + moduleMock->translationUnit->programInfo.kernelInfos.push_back(kernelInfo); |
| 227 | + |
| 228 | + kernelInfo->kernelDescriptor.external.debugData = std::make_unique<NEO::DebugData>(); |
| 229 | + |
| 230 | + auto debugData = MockElfEncoder<>::createRelocateableDebugDataElf(); |
| 231 | + kernelInfo->kernelDescriptor.external.debugData->vIsaSize = static_cast<uint32_t>(debugData.size()); |
| 232 | + kernelInfo->kernelDescriptor.external.debugData->vIsa = reinterpret_cast<char *>(debugData.data()); |
| 233 | + kernelInfo->kernelDescriptor.external.debugData->genIsa = nullptr; |
| 234 | + kernelInfo->kernelDescriptor.external.debugData->genIsaSize = 0; |
| 235 | + |
| 236 | + EXPECT_EQ(nullptr, kernelInfo->kernelDescriptor.external.relocatedDebugData); |
| 237 | + |
| 238 | + auto result = moduleMock->initialize(&moduleDesc, neoDevice); |
| 239 | + EXPECT_TRUE(result); |
| 240 | + |
| 241 | + EXPECT_NE(nullptr, kernelInfo->kernelDescriptor.external.relocatedDebugData); |
| 242 | +} |
| 243 | + |
109 | 244 | using KernelDebugSurfaceTest = Test<ModuleFixture>; |
110 | 245 |
|
111 | 246 | HWTEST_F(KernelDebugSurfaceTest, givenDebuggerAndBindfulKernelWhenAppendingKernelToCommandListThenBindfulSurfaceStateForDebugSurfaceIsProgrammed) { |
|
0 commit comments