summaryrefslogtreecommitdiff
path: root/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
diff options
context:
space:
mode:
authorMichael Kruse <llvm-project@meinersbur.de>2025-01-03 10:22:51 +0100
committerMichael Kruse <llvm-project@meinersbur.de>2025-01-03 10:22:51 +0100
commit38500d63e14ce340236840f60d356cdefb56a52c (patch)
tree17edbec446ce9b50d2f215a483b83afb293a635d /llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
parent1a3d5daaef7a6a63448a497da3eff7fc9e23df26 (diff)
parent27f30029741ecf023baece7b3dde1ff9011ffefc (diff)
Merge branch 'main' into users/meinersbur/flang_runtime_split-headersusers/meinersbur/flang_runtime_split-headers
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp')
-rw-r--r--llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
index 54de42a094f3..8729fd4b802c 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
@@ -9,6 +9,7 @@
#include "AArch64TargetObjectFile.h"
#include "AArch64TargetMachine.h"
#include "MCTargetDesc/AArch64MCExpr.h"
+#include "MCTargetDesc/AArch64TargetStreamer.h"
#include "llvm/BinaryFormat/Dwarf.h"
#include "llvm/CodeGen/MachineModuleInfoImpls.h"
#include "llvm/IR/Mangler.h"
@@ -28,6 +29,21 @@ void AArch64_ELFTargetObjectFile::Initialize(MCContext &Ctx,
SupportDebugThreadLocalLocation = false;
}
+void AArch64_ELFTargetObjectFile::emitPersonalityValueImpl(
+ MCStreamer &Streamer, const DataLayout &DL, const MCSymbol *Sym,
+ const MachineModuleInfo *MMI) const {
+ if (!MMI->getObjFileInfo<MachineModuleInfoELF>().hasSignedPersonality()) {
+ TargetLoweringObjectFileELF::emitPersonalityValueImpl(Streamer, DL, Sym,
+ MMI);
+ return;
+ }
+ auto *TS = static_cast<AArch64TargetStreamer *>(Streamer.getTargetStreamer());
+ // The value is ptrauth_string_discriminator("personality")
+ constexpr uint16_t Discriminator = 0x7EAD;
+ TS->emitAuthValue(MCSymbolRefExpr::create(Sym, getContext()), Discriminator,
+ AArch64PACKey::IA, /*HasAddressDiversity=*/true);
+}
+
const MCExpr *AArch64_ELFTargetObjectFile::getIndirectSymViaGOTPCRel(
const GlobalValue *GV, const MCSymbol *Sym, const MCValue &MV,
int64_t Offset, MachineModuleInfo *MMI, MCStreamer &Streamer) const {