@@ -555,21 +555,25 @@ bool ModuleImp::initialize(const ze_module_desc_t *desc, NEO::Device *neoDevice)
555555 return success;
556556}
557557
558- void ModuleImp::passDebugData () {
558+ void ModuleImp::createDebugZebin () {
559559 auto refBin = ArrayRef<const uint8_t >(reinterpret_cast <const uint8_t *>(translationUnit->unpackedDeviceBinary .get ()), translationUnit->unpackedDeviceBinarySize );
560- if (NEO::isDeviceBinaryFormat<NEO::DeviceBinaryFormat::Zebin>(refBin)) {
561- auto segments = getZebinSegments ();
562- auto debugZebin = NEO::Debug::createDebugZebin (refBin, segments);
560+ auto segments = getZebinSegments ();
561+ auto debugZebin = NEO::Debug::createDebugZebin (refBin, segments);
563562
564- translationUnit->debugDataSize = debugZebin.size ();
565- translationUnit->debugData .reset (new char [translationUnit->debugDataSize ]);
566- memcpy_s (translationUnit->debugData .get (), translationUnit->debugDataSize ,
567- debugZebin.data (), debugZebin.size ());
563+ translationUnit->debugDataSize = debugZebin.size ();
564+ translationUnit->debugData .reset (new char [translationUnit->debugDataSize ]);
565+ memcpy_s (translationUnit->debugData .get (), translationUnit->debugDataSize ,
566+ debugZebin.data (), debugZebin.size ());
567+ }
568568
569+ void ModuleImp::passDebugData () {
570+ auto refBin = ArrayRef<const uint8_t >(reinterpret_cast <const uint8_t *>(translationUnit->unpackedDeviceBinary .get ()), translationUnit->unpackedDeviceBinarySize );
571+ if (NEO::isDeviceBinaryFormat<NEO::DeviceBinaryFormat::Zebin>(refBin)) {
572+ createDebugZebin ();
569573 if (device->getSourceLevelDebugger ()) {
570574 NEO::DebugData debugData; // pass debug zebin in vIsa field
571- debugData.vIsa = reinterpret_cast <const char *>(debugZebin. data ());
572- debugData.vIsaSize = static_cast <uint32_t >(debugZebin. size () );
575+ debugData.vIsa = reinterpret_cast <const char *>(translationUnit-> debugData . get ());
576+ debugData.vIsaSize = static_cast <uint32_t >(translationUnit-> debugDataSize );
573577 device->getSourceLevelDebugger ()->notifyKernelDebugData (&debugData, " debug_zebin" , nullptr , 0 );
574578 }
575579 } else {
@@ -656,11 +660,17 @@ ze_result_t ModuleImp::getDebugInfo(size_t *pDebugDataSize, uint8_t *pDebugData)
656660 if (translationUnit == nullptr ) {
657661 return ZE_RESULT_ERROR_UNINITIALIZED;
658662 }
659- if (pDebugData == nullptr ) {
660- *pDebugDataSize = translationUnit->debugDataSize ;
661- return ZE_RESULT_SUCCESS;
663+ auto refBin = ArrayRef<const uint8_t >(reinterpret_cast <const uint8_t *>(translationUnit->unpackedDeviceBinary .get ()), translationUnit->unpackedDeviceBinarySize );
664+ if (nullptr == translationUnit->debugData .get () && NEO::isDeviceBinaryFormat<NEO::DeviceBinaryFormat::Zebin>(refBin)) {
665+ createDebugZebin ();
666+ }
667+ if (pDebugData != nullptr ) {
668+ if (*pDebugDataSize < translationUnit->debugDataSize ) {
669+ return ZE_RESULT_ERROR_INVALID_ARGUMENT;
670+ }
671+ memcpy_s (pDebugData, *pDebugDataSize, translationUnit->debugData .get (), translationUnit->debugDataSize );
662672 }
663- memcpy_s (pDebugData, *pDebugDataSize, translationUnit-> debugData . get (), translationUnit->debugDataSize ) ;
673+ *pDebugDataSize = translationUnit->debugDataSize ;
664674 return ZE_RESULT_SUCCESS;
665675}
666676
0 commit comments