Zebin - fix program headers

- do not add CPU segment LOAD in debug zebin

Resolves: NEO-7481

Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
Mateusz Hoppe
2022-11-03 18:17:18 +00:00
committed by Compute-Runtime-Automation
parent cf66060533
commit a30cc94708
3 changed files with 10 additions and 4 deletions

View File

@ -71,7 +71,9 @@ void DebugZebinCreator::createDebugZebin() {
sectionHeader.flags = section.header->flags;
if (auto segment = getSegmentByName(sectionName)) {
elfEncoder.appendProgramHeaderLoad(i, segment->address, segment->size);
if (!isCpuSegment(sectionName)) {
elfEncoder.appendProgramHeaderLoad(i, segment->address, segment->size);
}
sectionHeader.addr = segment->address;
}
}
@ -158,5 +160,9 @@ const Segments::Segment *DebugZebinCreator::getTextSegmentByName(ConstStringRef
return &kernelSegmentIt->second;
}
bool DebugZebinCreator::isCpuSegment(ConstStringRef sectionName) {
return (sectionName == SectionsNamesZebin::dataConstString);
}
} // namespace Debug
} // namespace NEO

View File

@ -51,6 +51,7 @@ class DebugZebinCreator {
bool isRelocTypeSupported(NEO::Elf::RELOC_TYPE_ZEBIN type);
const Segments::Segment *getSegmentByName(ConstStringRef sectionName);
const Segments::Segment *getTextSegmentByName(ConstStringRef textSegmentName);
bool isCpuSegment(ConstStringRef sectionName);
const Segments &segments;
const Elf &zebin;

View File

@ -228,12 +228,11 @@ TEST(DebugZebinTest, givenValidZebinThenDebugZebinIsGenerated) {
std::vector<std::tuple<Segment, uint64_t, uint64_t>> segmentsSortedByAddr = {{segments.constData, offsetConstData, fileSzConstData},
{segments.varData, offsetVarData, fileSzVarData},
{segments.stringData, offsetStringData, fileSzStringData},
{segments.nameToSegMap["kernel"], offsetKernel, fileSzKernel}};
std::sort(segmentsSortedByAddr.begin(), segmentsSortedByAddr.end(), [](auto seg1, auto seg2) { return std::get<0>(seg1).address < std::get<0>(seg2).address; });
EXPECT_EQ(4U, debugZebin.programHeaders.size());
for (size_t i = 0; i < 4U; i++) {
EXPECT_EQ(3U, debugZebin.programHeaders.size());
for (size_t i = 0; i < debugZebin.programHeaders.size(); i++) {
auto &segment = std::get<0>(segmentsSortedByAddr[i]);
auto &offset = std::get<1>(segmentsSortedByAddr[i]);
auto &fileSz = std::get<2>(segmentsSortedByAddr[i]);