99#include " AArch64TargetObjectFile.h"
1010#include " AArch64TargetMachine.h"
1111#include " MCTargetDesc/AArch64MCExpr.h"
12+ #include " MCTargetDesc/AArch64TargetStreamer.h"
1213#include " llvm/ADT/StringExtras.h"
1314#include " llvm/BinaryFormat/Dwarf.h"
1415#include " llvm/CodeGen/MachineModuleInfoImpls.h"
@@ -29,6 +30,21 @@ void AArch64_ELFTargetObjectFile::Initialize(MCContext &Ctx,
2930 SupportDebugThreadLocalLocation = false ;
3031}
3132
33+ void AArch64_ELFTargetObjectFile::emitPersonalityValueImpl (
34+ MCStreamer &Streamer, const DataLayout &DL, const MCSymbol *Sym,
35+ const MachineModuleInfo *MMI) const {
36+ if (!MMI->getObjFileInfo <MachineModuleInfoELF>().hasSignedPersonality ()) {
37+ TargetLoweringObjectFileELF::emitPersonalityValueImpl (Streamer, DL, Sym,
38+ MMI);
39+ return ;
40+ }
41+ auto *TS = static_cast <AArch64TargetStreamer *>(Streamer.getTargetStreamer ());
42+ // The value is ptrauth_string_discriminator("personality")
43+ constexpr uint16_t Discriminator = 0x7EAD ;
44+ TS->emitAuthValue (MCSymbolRefExpr::create (Sym, getContext ()), Discriminator,
45+ AArch64PACKey::IA, /* HasAddressDiversity=*/ true );
46+ }
47+
3248const MCExpr *AArch64_ELFTargetObjectFile::getIndirectSymViaGOTPCRel (
3349 const GlobalValue *GV, const MCSymbol *Sym, const MCValue &MV,
3450 int64_t Offset, MachineModuleInfo *MMI, MCStreamer &Streamer) const {
0 commit comments