@@ -2029,50 +2029,61 @@ Expected<bool> GenericPluginTy::checkBitcodeImage(StringRef Image) const {
20292029
20302030int32_t GenericPluginTy::is_initialized () const { return Initialized; }
20312031
2032- int32_t GenericPluginTy::isPluginCompatible (StringRef Image) {
2033- auto HandleError = [&](Error Err) -> bool {
2034- [[maybe_unused]] std::string ErrStr = toString (std::move (Err));
2035- DP (" Failure to check validity of image %p: %s" , Image, ErrStr.c_str ());
2036- return false ;
2037- };
2038- switch (identify_magic (Image)) {
2039- case file_magic::elf:
2040- case file_magic::elf_relocatable:
2041- case file_magic::elf_executable:
2042- case file_magic::elf_shared_object:
2043- case file_magic::elf_core: {
2044- auto MatchOrErr = checkELFImage (Image);
2045- if (Error Err = MatchOrErr.takeError ())
2046- return HandleError (std::move (Err));
2047- return *MatchOrErr;
2048- }
2049- case file_magic::bitcode: {
2050- auto MatchOrErr = checkBitcodeImage (Image);
2051- if (Error Err = MatchOrErr.takeError ())
2052- return HandleError (std::move (Err));
2053- return *MatchOrErr;
2054- }
2055- default :
2056- return false ;
2057- }
2032+ void GenericPluginTy::check_invalid_image (__tgt_device_image *InvalidImage) {
2033+ // Check if the image was rejected because of conflicting XNACK modes.
2034+ checkInvalidImage (InvalidImage);
20582035}
20592036
2060- int32_t GenericPluginTy::isDeviceCompatible (int32_t DeviceId, StringRef Image) {
2061- auto HandleError = [&](Error Err) -> bool {
2062- [[maybe_unused]] std::string ErrStr = toString (std::move (Err));
2063- DP (" Failure to check validity of image %p: %s" , Image, ErrStr.c_str ());
2064- return false ;
2065- };
2066- switch (identify_magic (Image)) {
2067- case file_magic::elf:
2068- case file_magic::elf_relocatable:
2069- case file_magic::elf_executable:
2070- case file_magic::elf_shared_object:
2071- case file_magic::elf_core: {
2072- auto MatchOrErr = checkELFImage (Image);
2073- if (Error Err = MatchOrErr.takeError ())
2074- return HandleError (std::move (Err));
2075- if (!*MatchOrErr)
2037+ int32_t GenericPluginTy::supports_empty_images () {
2038+ return supportsEmptyImages ();
2039+ }
2040+
2041+ int32_t GenericPluginTy::is_plugin_compatible (__tgt_device_image *Image) {
2042+ auto T = logger::log<int32_t >(__func__, Image);
2043+ auto R = [&]() {
2044+ StringRef Buffer (reinterpret_cast <const char *>(Image->ImageStart ),
2045+ utils::getPtrDiff (Image->ImageEnd , Image->ImageStart ));
2046+
2047+ auto HandleError = [&](Error Err) -> bool {
2048+ [[maybe_unused]] std::string ErrStr = toString (std::move (Err));
2049+ DP (" Failure to check validity of image %p: %s" , Image, ErrStr.c_str ());
2050+ return false ;
2051+ };
2052+ switch (identify_magic (Buffer)) {
2053+ case file_magic::elf:
2054+ case file_magic::elf_relocatable:
2055+ case file_magic::elf_executable:
2056+ case file_magic::elf_shared_object:
2057+ case file_magic::elf_core: {
2058+ auto MatchOrErr = checkELFImage (Buffer);
2059+ if (Error Err = MatchOrErr.takeError ())
2060+ return HandleError (std::move (Err));
2061+ return *MatchOrErr;
2062+ }
2063+ case file_magic::bitcode: {
2064+ auto MatchOrErr = checkBitcodeImage (Buffer);
2065+ if (Error Err = MatchOrErr.takeError ())
2066+ return HandleError (std::move (Err));
2067+ return *MatchOrErr;
2068+ }
2069+ default :
2070+ return false ;
2071+ }
2072+ }();
2073+ T.res (R);
2074+ return R;
2075+ }
2076+
2077+ int32_t GenericPluginTy::is_device_compatible (int32_t DeviceId,
2078+ __tgt_device_image *Image) {
2079+ auto T = logger::log<int32_t >(__func__, DeviceId, Image);
2080+ auto R = [&]() {
2081+ StringRef Buffer (reinterpret_cast <const char *>(Image->ImageStart ),
2082+ utils::getPtrDiff (Image->ImageEnd , Image->ImageStart ));
2083+
2084+ auto HandleError = [&](Error Err) -> bool {
2085+ [[maybe_unused]] std::string ErrStr = toString (std::move (Err));
2086+ DP (" Failure to check validity of image %p: %s" , Image, ErrStr.c_str ());
20762087 return false ;
20772088 };
20782089 switch (identify_magic (Buffer)) {
@@ -2087,21 +2098,25 @@ int32_t GenericPluginTy::isDeviceCompatible(int32_t DeviceId, StringRef Image) {
20872098 if (!*MatchOrErr)
20882099 return false ;
20892100
2090- // Perform plugin-dependent checks for the specific architecture if needed.
2091- auto CompatibleOrErr = isELFCompatible (DeviceId, Image);
2092- if (Error Err = CompatibleOrErr.takeError ())
2093- return HandleError (std::move (Err));
2094- return *CompatibleOrErr;
2095- }
2096- case file_magic::bitcode: {
2097- auto MatchOrErr = checkBitcodeImage (Image);
2098- if (Error Err = MatchOrErr.takeError ())
2099- return HandleError (std::move (Err));
2100- return *MatchOrErr;
2101- }
2102- default :
2103- return false ;
2104- }
2101+ // Perform plugin-dependent checks for the specific architecture if
2102+ // needed.
2103+ auto CompatibleOrErr = isELFCompatible (DeviceId, Buffer);
2104+ if (Error Err = CompatibleOrErr.takeError ())
2105+ return HandleError (std::move (Err));
2106+ return *CompatibleOrErr;
2107+ }
2108+ case file_magic::bitcode: {
2109+ auto MatchOrErr = checkBitcodeImage (Buffer);
2110+ if (Error Err = MatchOrErr.takeError ())
2111+ return HandleError (std::move (Err));
2112+ return *MatchOrErr;
2113+ }
2114+ default :
2115+ return false ;
2116+ }
2117+ }();
2118+ T.res (R);
2119+ return R;
21052120}
21062121
21072122int32_t GenericPluginTy::is_device_initialized (int32_t DeviceId) const {
0 commit comments