mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Decode debug environment - zebin
Signed-off-by: Krystian Chmielewski <krystian.chmielewski@intel.com>
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
b0898b0610
commit
03e29c34c4
@ -179,6 +179,8 @@ void extractZeInfoKernelSections(const NEO::Yaml::YamlParser &parser, const NEO:
|
||||
outZeInfoKernelSections.nameNd.push_back(&kernelMetadataNd);
|
||||
} else if (NEO::Elf::ZebinKernelMetadata::Tags::Kernel::executionEnv == key) {
|
||||
outZeInfoKernelSections.executionEnvNd.push_back(&kernelMetadataNd);
|
||||
} else if (NEO::Elf::ZebinKernelMetadata::Tags::Kernel::debugEnv == key) {
|
||||
outZeInfoKernelSections.debugEnvNd.push_back(&kernelMetadataNd);
|
||||
} else if (NEO::Elf::ZebinKernelMetadata::Tags::Kernel::payloadArguments == key) {
|
||||
outZeInfoKernelSections.payloadArgumentsNd.push_back(&kernelMetadataNd);
|
||||
} else if (NEO::Elf::ZebinKernelMetadata::Tags::Kernel::perThreadPayloadArguments == key) {
|
||||
@ -198,6 +200,7 @@ void extractZeInfoKernelSections(const NEO::Yaml::YamlParser &parser, const NEO:
|
||||
DecodeError validateZeInfoKernelSectionsCount(const ZeInfoKernelSections &outZeInfoKernelSections, std::string &outErrReason, std::string &outWarning) {
|
||||
bool valid = validateZebinSectionsCountExactly(outZeInfoKernelSections.nameNd, NEO::Elf::ZebinKernelMetadata::Tags::Kernel::name, 1U, outErrReason, outWarning);
|
||||
valid &= validateZebinSectionsCountExactly(outZeInfoKernelSections.executionEnvNd, NEO::Elf::ZebinKernelMetadata::Tags::Kernel::executionEnv, 1U, outErrReason, outWarning);
|
||||
valid &= validateZebinSectionsCountAtMost(outZeInfoKernelSections.debugEnvNd, NEO::Elf::ZebinKernelMetadata::Tags::Kernel::debugEnv, 1U, outErrReason, outWarning);
|
||||
valid &= validateZebinSectionsCountAtMost(outZeInfoKernelSections.payloadArgumentsNd, NEO::Elf::ZebinKernelMetadata::Tags::Kernel::payloadArguments, 1U, outErrReason, outWarning);
|
||||
valid &= validateZebinSectionsCountAtMost(outZeInfoKernelSections.perThreadPayloadArgumentsNd, NEO::Elf::ZebinKernelMetadata::Tags::Kernel::perThreadPayloadArguments, 1U, outErrReason, outWarning);
|
||||
valid &= validateZebinSectionsCountAtMost(outZeInfoKernelSections.bindingTableIndicesNd, NEO::Elf::ZebinKernelMetadata::Tags::Kernel::bindingTableIndices, 1U, outErrReason, outWarning);
|
||||
@ -285,6 +288,22 @@ DecodeError readZeInfoExecutionEnvironment(const NEO::Yaml::YamlParser &parser,
|
||||
return validExecEnv ? DecodeError::Success : DecodeError::InvalidBinary;
|
||||
}
|
||||
|
||||
DecodeError readZeInfoDebugEnvironment(const NEO::Yaml::YamlParser &parser, const NEO::Yaml::Node &node,
|
||||
NEO::Elf::ZebinKernelMetadata::Types::Kernel::DebugEnv::DebugEnvBaseT &outDebugEnv,
|
||||
ConstStringRef context,
|
||||
std::string &outErrReason, std::string &outWarning) {
|
||||
bool validDebugEnv = true;
|
||||
for (const auto &debugEnvNd : parser.createChildrenRange(node)) {
|
||||
auto key = parser.readKey(debugEnvNd);
|
||||
if (NEO::Elf::ZebinKernelMetadata::Tags::Kernel::DebugEnv::debugSurfaceBTI == key) {
|
||||
validDebugEnv = validDebugEnv & readZeInfoValueChecked(parser, debugEnvNd, outDebugEnv.debugSurfaceBTI, context, outErrReason);
|
||||
} else {
|
||||
outWarning.append("DeviceBinaryFormat::Zebin::" + NEO::Elf::SectionsNamesZebin::zeInfo.str() + " : Unknown entry \"" + key.str() + "\" in context of " + context.str() + "\n");
|
||||
}
|
||||
}
|
||||
return validDebugEnv ? DecodeError::Success : DecodeError::InvalidBinary;
|
||||
}
|
||||
|
||||
DecodeError readZeInfoExperimentalProperties(const NEO::Yaml::YamlParser &parser, const NEO::Yaml::Node &node,
|
||||
NEO::Elf::ZebinKernelMetadata::Types::Kernel::ExecutionEnv::ExperimentalPropertiesBaseT &outExperimentalProperties,
|
||||
ConstStringRef context,
|
||||
@ -928,6 +947,18 @@ NEO::DecodeError populateKernelDescriptor(NEO::ProgramInfo &dst, NEO::Elf::Elf<N
|
||||
return execEnvErr;
|
||||
}
|
||||
|
||||
NEO::Elf::ZebinKernelMetadata::Types::Kernel::DebugEnv::DebugEnvBaseT debugEnv;
|
||||
if (false == zeInfokernelSections.debugEnvNd.empty()) {
|
||||
auto debugEnvErr = readZeInfoDebugEnvironment(yamlParser, *zeInfokernelSections.debugEnvNd[0], debugEnv, kernelInfo->kernelDescriptor.kernelMetadata.kernelName, outErrReason, outWarning);
|
||||
if (DecodeError::Success != debugEnvErr) {
|
||||
return debugEnvErr;
|
||||
}
|
||||
|
||||
if (debugEnv.debugSurfaceBTI == 0) {
|
||||
kernelDescriptor.payloadMappings.implicitArgs.systemThreadSurfaceAddress.bindful = 0U;
|
||||
}
|
||||
}
|
||||
|
||||
ZeInfoPerThreadPayloadArguments perThreadPayloadArguments;
|
||||
if (false == zeInfokernelSections.perThreadPayloadArgumentsNd.empty()) {
|
||||
auto perThreadPayloadArgsErr = readZeInfoPerThreadPayloadArguments(yamlParser, *zeInfokernelSections.perThreadPayloadArgumentsNd[0], perThreadPayloadArguments,
|
||||
@ -1046,7 +1077,8 @@ NEO::DecodeError populateKernelDescriptor(NEO::ProgramInfo &dst, NEO::Elf::Elf<N
|
||||
|
||||
auto generatedSshPos = kernelDescriptor.generatedHeaps.size();
|
||||
uint32_t generatedSshSize = 0U;
|
||||
if (bindingTableIndices.empty() == false) {
|
||||
if (false == bindingTableIndices.empty() ||
|
||||
NEO::isValidOffset(kernelDescriptor.payloadMappings.implicitArgs.systemThreadSurfaceAddress.bindful)) {
|
||||
static constexpr auto maxSurfaceStateSize = 64U;
|
||||
static constexpr auto btiSize = sizeof(int);
|
||||
auto numEntries = maximumBindingTableEntry.btiValue + 1;
|
||||
|
Reference in New Issue
Block a user