@@ -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