@@ -432,25 +432,33 @@ class LinuxKernelRewriter final : public MetadataRewriter {
432
432
};
433
433
434
434
Error 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 ();
451
458
}
459
+
452
460
return createStringError (errc::executable_format_error,
453
- " Linux kernel version is unknown" );
461
+ " Linux kernel version is unknown: " + S );
454
462
}
455
463
456
464
void LinuxKernelRewriter::processLKSections () {
0 commit comments