@@ -2868,6 +2868,46 @@ TEST_F(ModuleTests, givenConstDataStringSectionWhenLinkingModuleThenSegmentIsPat
28682868 EXPECT_EQ (static_cast <size_t >(stringsAddr), *reinterpret_cast <size_t *>(patchAddr));
28692869}
28702870
2871+ TEST_F (ModuleTests, givenImplicitArgsRelocationAndStackCallsWhenLinkingBuiltinModuleThenSegmentIsNotPatchedAndImplicitArgsAreNotRequired) {
2872+ auto pModule = std::make_unique<WhiteBox<Module>>(device, nullptr , ModuleType::Builtin);
2873+
2874+ pModule->maxGroupSize = 32 ;
2875+
2876+ char data[64 ]{};
2877+ auto kernelInfo = new KernelInfo ();
2878+ kernelInfo->heapInfo .KernelHeapSize = 64 ;
2879+ kernelInfo->heapInfo .pKernelHeap = data;
2880+
2881+ std::unique_ptr<WhiteBox<::L0::KernelImmutableData>> kernelImmData{new WhiteBox<::L0::KernelImmutableData>(this ->device )};
2882+ kernelImmData->initialize (kernelInfo, device, 0 , nullptr , nullptr , true );
2883+
2884+ kernelImmData->kernelDescriptor ->kernelAttributes .flags .useStackCalls = true ;
2885+ auto isaCpuPtr = reinterpret_cast <char *>(kernelImmData->isaGraphicsAllocation ->getUnderlyingBuffer ());
2886+ pModule->kernelImmDatas .push_back (std::move (kernelImmData));
2887+ pModule->translationUnit ->programInfo .kernelInfos .push_back (kernelInfo);
2888+ auto linkerInput = std::make_unique<::WhiteBox<NEO::LinkerInput>>();
2889+ linkerInput->traits .requiresPatchingOfInstructionSegments = true ;
2890+ linkerInput->textRelocations .push_back ({{implicitArgsRelocationSymbolName, 0x8 , LinkerInput::RelocationInfo::Type::AddressLow, SegmentType::Instructions}});
2891+ pModule->translationUnit ->programInfo .linkerInput = std::move (linkerInput);
2892+
2893+ EXPECT_FALSE (kernelInfo->kernelDescriptor .kernelAttributes .flags .requiresImplicitArgs );
2894+ auto status = pModule->linkBinary ();
2895+ EXPECT_TRUE (status);
2896+ EXPECT_FALSE (kernelInfo->kernelDescriptor .kernelAttributes .flags .requiresImplicitArgs );
2897+
2898+ ze_kernel_handle_t kernelHandle;
2899+
2900+ ze_kernel_desc_t kernelDesc = {};
2901+ kernelDesc.pKernelName = kernelInfo->kernelDescriptor .kernelMetadata .kernelName .c_str ();
2902+
2903+ ze_result_t res = pModule->createKernel (&kernelDesc, &kernelHandle);
2904+
2905+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
2906+
2907+ EXPECT_EQ (0u , *reinterpret_cast <uint32_t *>(ptrOffset (isaCpuPtr, 0x8 )));
2908+ Kernel::fromHandle (kernelHandle)->destroy ();
2909+ }
2910+
28712911TEST_F (ModuleTests, givenImplicitArgsRelocationAndStackCallsWhenLinkingModuleThenSegmentIsPatchedAndImplicitArgsAreRequired) {
28722912 auto pModule = std::make_unique<Module>(device, nullptr , ModuleType::User);
28732913
0 commit comments