@@ -432,25 +432,33 @@ class LinuxKernelRewriter final : public MetadataRewriter {
432432};
433433
434434Error LinuxKernelRewriter::detectLinuxKernelVersion () {
435-   if  (BinaryData *BD = BC.getBinaryDataByName (" linux_banner"  )) {
436-     const  BinarySection &Section = BD->getSection ();
437-     const  std::string S =
438-         Section.getContents ().substr (BD->getOffset (), BD->getSize ()).str ();
439- 
440-     const  std::regex Re (R"---( Linux version ((\d+)\.(\d+)(\.(\d+))?))---"  );
441-     std::smatch Match;
442-     if  (std::regex_search (S, Match, Re)) {
443-       const  unsigned  Major = std::stoi (Match[2 ].str ());
444-       const  unsigned  Minor = std::stoi (Match[3 ].str ());
445-       const  unsigned  Rev = Match[5 ].matched  ? std::stoi (Match[5 ].str ()) : 0 ;
446-       LinuxKernelVersion = LKVersion (Major, Minor, Rev);
447-       BC.outs () << " BOLT-INFO: Linux kernel version is "   << Match[1 ].str ()
448-                 << " \n "  ;
449-       return  Error::success ();
450-     }
435+   //  Check for global and local linux_banner symbol.
436+   BinaryData *BD = BC.getBinaryDataByName (" linux_banner"  );
437+   if  (!BD)
438+     BD = BC.getBinaryDataByName (" linux_banner/1"  );
439+ 
440+   if  (!BD)
441+     return  createStringError (errc::executable_format_error,
442+                              " unable to locate linux_banner"  );
443+ 
444+   const  BinarySection &Section = BD->getSection ();
445+   const  std::string S =
446+       Section.getContents ().substr (BD->getOffset (), BD->getSize ()).str ();
447+ 
448+   const  std::regex Re (R"---( Linux version ((\d+)\.(\d+)(\.(\d+))?))---"  );
449+   std::smatch Match;
450+   if  (std::regex_search (S, Match, Re)) {
451+     const  unsigned  Major = std::stoi (Match[2 ].str ());
452+     const  unsigned  Minor = std::stoi (Match[3 ].str ());
453+     const  unsigned  Rev = Match[5 ].matched  ? std::stoi (Match[5 ].str ()) : 0 ;
454+     LinuxKernelVersion = LKVersion (Major, Minor, Rev);
455+     BC.outs () << " BOLT-INFO: Linux kernel version is "   << Match[1 ].str ()
456+               << " \n "  ;
457+     return  Error::success ();
451458  }
459+ 
452460  return  createStringError (errc::executable_format_error,
453-                            " Linux kernel version is unknown"  );
461+                            " Linux kernel version is unknown:  "  + S );
454462}
455463
456464void  LinuxKernelRewriter::processLKSections () {
0 commit comments