mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
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:

committed by
Compute-Runtime-Automation

parent
cf66060533
commit
a30cc94708
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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]);
|
||||
|
Reference in New Issue
Block a user