mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Fix printf issue with printing pointers from 32bit kernel on 64bit system.
Change-Id: I77771b4ebe6c4335d51dc1834f0b8f9df2a069a4
This commit is contained in:

committed by
sys_ocldev

parent
2e4a64f1e0
commit
5946a2cd15
@ -2128,3 +2128,27 @@ TEST(KernelTest, givenKernelWhenDebugFlagToUseMaxSimdForCalculationsIsUsedThenMa
|
||||
kernel.mockKernel->getWorkGroupInfo(device.get(), CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &maxKernelWkgSize, nullptr);
|
||||
EXPECT_EQ(256u, maxKernelWkgSize);
|
||||
}
|
||||
|
||||
TEST(KernelTest, givenKernelWithKernelInfoWith32bitPointerSizeThenReport32bit) {
|
||||
KernelInfo info;
|
||||
info.gpuPointerSize = 4;
|
||||
|
||||
MockContext context;
|
||||
MockProgram program(&context, false);
|
||||
std::unique_ptr<MockDevice> device(Device::create<OCLRT::MockDevice>(nullptr));
|
||||
std::unique_ptr<MockKernel> kernel(new MockKernel(&program, info, *device.get()));
|
||||
|
||||
EXPECT_TRUE(kernel->is32Bit());
|
||||
}
|
||||
|
||||
TEST(KernelTest, givenKernelWithKernelInfoWith64bitPointerSizeThenReport64bit) {
|
||||
KernelInfo info;
|
||||
info.gpuPointerSize = 8;
|
||||
|
||||
MockContext context;
|
||||
MockProgram program(&context, false);
|
||||
std::unique_ptr<MockDevice> device(Device::create<OCLRT::MockDevice>(nullptr));
|
||||
std::unique_ptr<MockKernel> kernel(new MockKernel(&program, info, *device.get()));
|
||||
|
||||
EXPECT_FALSE(kernel->is32Bit());
|
||||
}
|
||||
|
@ -749,7 +749,7 @@ TEST_F(PrintFormatterTest, GivenPrintfFormatWhenPointerThenInsertAddress) {
|
||||
storeData(reinterpret_cast<void *>(&temp));
|
||||
|
||||
// on 32bit configurations add extra 4 bytes when storing pointers, IGC always stores pointers on 8 bytes
|
||||
if (!is64bit) {
|
||||
if (is32bit) {
|
||||
uint32_t padding = 0;
|
||||
storeData(padding);
|
||||
}
|
||||
@ -764,6 +764,33 @@ TEST_F(PrintFormatterTest, GivenPrintfFormatWhenPointerThenInsertAddress) {
|
||||
EXPECT_STREQ(referenceOutput, actualOutput);
|
||||
}
|
||||
|
||||
TEST_F(PrintFormatterTest, GivenPrintfFormatWhenPointerWith32BitKernelThenPrint32BitPointer) {
|
||||
auto stringIndex = injectFormatString("%p");
|
||||
storeData(stringIndex);
|
||||
kernelInfo->gpuPointerSize = 4;
|
||||
|
||||
storeData(PRINTF_DATA_TYPE::POINTER);
|
||||
|
||||
// store pointer
|
||||
uint32_t addressValue = 0;
|
||||
storeData(addressValue);
|
||||
|
||||
void *pointer = nullptr;
|
||||
|
||||
// store non zero padding
|
||||
uint32_t padding = 0xdeadbeef;
|
||||
storeData(padding);
|
||||
|
||||
char actualOutput[PrintFormatter::maxPrintfOutputLength];
|
||||
char referenceOutput[PrintFormatter::maxPrintfOutputLength];
|
||||
|
||||
snprintf(referenceOutput, sizeof(referenceOutput), "%p", pointer);
|
||||
|
||||
printFormatter->printKernelOutput([&actualOutput](char *str) { strncpy_s(actualOutput, PrintFormatter::maxPrintfOutputLength, str, PrintFormatter::maxPrintfOutputLength); });
|
||||
|
||||
EXPECT_STREQ(referenceOutput, actualOutput);
|
||||
}
|
||||
|
||||
TEST_F(PrintFormatterTest, GivenPrintfFormatWhen2ByteVectorsThenParseDataBufferProperly) {
|
||||
int channelCount = 4;
|
||||
|
||||
|
Reference in New Issue
Block a user