@@ -2841,15 +2841,17 @@ static void readSecurityNotes(Ctx &ctx) {
28412841 StringRef referenceFileName;
28422842 if (ctx.arg .emachine == EM_AARCH64) {
28432843 auto it = llvm::find_if (ctx.objectFiles , [](const ELFFileBase *f) {
2844- return ! f->aarch64PauthAbiCoreInfo .empty ();
2844+ return f->aarch64PauthAbiCoreInfo .has_value ();
28452845 });
28462846 if (it != ctx.objectFiles .end ()) {
28472847 ctx.aarch64PauthAbiCoreInfo = (*it)->aarch64PauthAbiCoreInfo ;
28482848 referenceFileName = (*it)->getName ();
28492849 }
28502850 }
2851- bool hasValidPauthAbiCoreInfo = llvm::any_of (
2852- ctx.aarch64PauthAbiCoreInfo , [](uint8_t c) { return c != 0 ; });
2851+ bool hasValidPauthAbiCoreInfo =
2852+ ctx.aarch64PauthAbiCoreInfo .has_value () &&
2853+ (ctx.aarch64PauthAbiCoreInfo ->aarch64PauthAbiPlatform != 0 ||
2854+ ctx.aarch64PauthAbiCoreInfo ->aarch64PauthAbiVersion != 0 );
28532855
28542856 auto report = [&](ReportPolicy policy) -> ELFSyncStream {
28552857 return {ctx, toDiagLevel (policy)};
@@ -2909,10 +2911,10 @@ static void readSecurityNotes(Ctx &ctx) {
29092911 }
29102912 ctx.arg .andFeatures &= features;
29112913
2912- if (ctx.aarch64PauthAbiCoreInfo . empty () )
2914+ if (! ctx.aarch64PauthAbiCoreInfo )
29132915 continue ;
29142916
2915- if (f->aarch64PauthAbiCoreInfo . empty () ) {
2917+ if (! f->aarch64PauthAbiCoreInfo ) {
29162918 report (ctx.arg .zPauthReport )
29172919 << f
29182920 << " : -z pauth-report: file does not have AArch64 "
@@ -2921,12 +2923,25 @@ static void readSecurityNotes(Ctx &ctx) {
29212923 continue ;
29222924 }
29232925
2924- if (ctx.aarch64PauthAbiCoreInfo != f->aarch64PauthAbiCoreInfo )
2925- Err (ctx) << " incompatible values of AArch64 PAuth core info found\n >>> "
2926+ if (ctx.aarch64PauthAbiCoreInfo ->aarch64PauthAbiPlatform !=
2927+ f->aarch64PauthAbiCoreInfo ->aarch64PauthAbiPlatform )
2928+ Err (ctx) << " incompatible AArch64 PAuth Platform Values\n >>> "
29262929 << referenceFileName << " : 0x"
2927- << toHex (ctx.aarch64PauthAbiCoreInfo , /* LowerCase=*/ true )
2930+ << toHex (ctx.aarch64PauthAbiCoreInfo ->aarch64PauthAbiPlatform ,
2931+ /* LowerCase=*/ true )
29282932 << " \n >>> " << f << " : 0x"
2929- << toHex (f->aarch64PauthAbiCoreInfo , /* LowerCase=*/ true );
2933+ << toHex (f->aarch64PauthAbiCoreInfo ->aarch64PauthAbiPlatform ,
2934+ /* LowerCase=*/ true );
2935+
2936+ if (ctx.aarch64PauthAbiCoreInfo ->aarch64PauthAbiVersion !=
2937+ f->aarch64PauthAbiCoreInfo ->aarch64PauthAbiVersion )
2938+ Err (ctx) << " incompatible AArch64 PAuth Version Values\n >>> "
2939+ << referenceFileName << " : 0x"
2940+ << toHex (ctx.aarch64PauthAbiCoreInfo ->aarch64PauthAbiVersion ,
2941+ /* LowerCase=*/ true )
2942+ << " \n >>> " << f << " : 0x"
2943+ << toHex (f->aarch64PauthAbiCoreInfo ->aarch64PauthAbiVersion ,
2944+ /* LowerCase=*/ true );
29302945 }
29312946
29322947 // Force enable Shadow Stack.
0 commit comments