[llvm-branch-commits] [clang] 4fe98aa - Revert "[PAC][ELF][AArch64] Support signed personality function pointer (#113…"
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Dec 9 22:10:26 PST 2024
Author: Daniil Kovalev
Date: 2024-12-10T09:10:23+03:00
New Revision: 4fe98aa2253925a6bc24bd30f2c654756c77cc28
URL: https://github.com/llvm/llvm-project/commit/4fe98aa2253925a6bc24bd30f2c654756c77cc28
DIFF: https://github.com/llvm/llvm-project/commit/4fe98aa2253925a6bc24bd30f2c654756c77cc28.diff
LOG: Revert "[PAC][ELF][AArch64] Support signed personality function pointer (#113…"
This reverts commit 4fb1cda6606ba75782aa1964835abf1a69e2adae.
Added:
Modified:
clang/lib/CodeGen/CodeGenModule.cpp
clang/test/CodeGen/ptrauth-module-flags.c
llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
llvm/include/llvm/Target/TargetLoweringObjectFile.h
llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp
llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
llvm/lib/Target/AArch64/AArch64TargetObjectFile.h
llvm/lib/Target/AArch64/CMakeLists.txt
llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.cpp
llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.h
llvm/lib/Target/TargetLoweringObjectFile.cpp
llvm/utils/gn/secondary/llvm/lib/Target/AArch64/BUILD.gn
Removed:
llvm/lib/Target/AArch64/AArch64MachineModuleInfo.cpp
llvm/lib/Target/AArch64/AArch64MachineModuleInfo.h
llvm/test/CodeGen/AArch64/ptrauth-sign-personality.ll
################################################################################
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 841fb1ced9a02b..d3d5c0743a520b 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -1218,9 +1218,6 @@ void CodeGenModule::Release() {
getModule().addModuleFlag(llvm::Module::Min, "ptrauth-elf-got", 1);
if (getTriple().isOSLinux()) {
- if (LangOpts.PointerAuthCalls)
- getModule().addModuleFlag(llvm::Module::Min, "ptrauth-sign-personality",
- 1);
assert(getTriple().isOSBinFormatELF());
using namespace llvm::ELF;
uint64_t PAuthABIVersion =
diff --git a/clang/test/CodeGen/ptrauth-module-flags.c b/clang/test/CodeGen/ptrauth-module-flags.c
index e441d52cb7c62b..5a7e9a7c2a36fe 100644
--- a/clang/test/CodeGen/ptrauth-module-flags.c
+++ b/clang/test/CodeGen/ptrauth-module-flags.c
@@ -1,13 +1,8 @@
// RUN: %clang_cc1 -triple aarch64-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=OFF
// RUN: %clang_cc1 -triple aarch64-linux-gnu -fptrauth-elf-got -emit-llvm %s -o - | FileCheck %s --check-prefix=ELFGOT
-// RUN: %clang_cc1 -triple aarch64-linux-gnu -fptrauth-calls -emit-llvm %s -o - | FileCheck %s --check-prefix=PERSONALITY
// ELFGOT: !llvm.module.flags = !{
// ELFGOT-SAME: !1
// ELFGOT: !1 = !{i32 8, !"ptrauth-elf-got", i32 1}
-// PERSONALITY: !llvm.module.flags = !{
-// PERSONALITY-SAME: !1
-// PERSONALITY: !1 = !{i32 8, !"ptrauth-sign-personality", i32 1}
-
// OFF-NOT: "ptrauth-
diff --git a/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h b/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
index a2a9e5d499e527..8eef45ce565deb 100644
--- a/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
+++ b/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
@@ -52,13 +52,7 @@ class TargetLoweringObjectFileELF : public TargetLoweringObjectFile {
void emitModuleMetadata(MCStreamer &Streamer, Module &M) const override;
void emitPersonalityValue(MCStreamer &Streamer, const DataLayout &DL,
- const MCSymbol *Sym,
- const MachineModuleInfo *MMI) const override;
-
- virtual void emitPersonalityValueImpl(MCStreamer &Streamer,
- const DataLayout &DL,
- const MCSymbol *Sym,
- const MachineModuleInfo *MMI) const;
+ const MCSymbol *Sym) const override;
/// Given a constant with the SectionKind, return a section that it should be
/// placed in.
diff --git a/llvm/include/llvm/Target/TargetLoweringObjectFile.h b/llvm/include/llvm/Target/TargetLoweringObjectFile.h
index 4864ba843f4886..0c09cfe684783b 100644
--- a/llvm/include/llvm/Target/TargetLoweringObjectFile.h
+++ b/llvm/include/llvm/Target/TargetLoweringObjectFile.h
@@ -82,8 +82,7 @@ class TargetLoweringObjectFile : public MCObjectFileInfo {
virtual void Initialize(MCContext &ctx, const TargetMachine &TM);
virtual void emitPersonalityValue(MCStreamer &Streamer, const DataLayout &TM,
- const MCSymbol *Sym,
- const MachineModuleInfo *MMI) const;
+ const MCSymbol *Sym) const;
/// Emit the module-level metadata that the platform cares about.
virtual void emitModuleMetadata(MCStreamer &Streamer, Module &M) const {}
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp
index 4fac4bbc98477d..087ee02a7f2b35 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp
@@ -50,8 +50,7 @@ void DwarfCFIException::endModule() {
// Emit indirect reference table for all used personality functions
for (const GlobalValue *Personality : Personalities) {
MCSymbol *Sym = Asm->getSymbol(Personality);
- TLOF.emitPersonalityValue(*Asm->OutStreamer, Asm->getDataLayout(), Sym,
- Asm->MMI);
+ TLOF.emitPersonalityValue(*Asm->OutStreamer, Asm->getDataLayout(), Sym);
}
Personalities.clear();
}
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index d5342b5d3651f1..ce50a3c19ffe04 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -413,8 +413,7 @@ MCSymbol *TargetLoweringObjectFileELF::getCFIPersonalitySymbol(
}
void TargetLoweringObjectFileELF::emitPersonalityValue(
- MCStreamer &Streamer, const DataLayout &DL, const MCSymbol *Sym,
- const MachineModuleInfo *MMI) const {
+ MCStreamer &Streamer, const DataLayout &DL, const MCSymbol *Sym) const {
SmallString<64> NameData("DW.ref.");
NameData += Sym->getName();
MCSymbolELF *Label =
@@ -432,13 +431,6 @@ void TargetLoweringObjectFileELF::emitPersonalityValue(
Streamer.emitELFSize(Label, E);
Streamer.emitLabel(Label);
- emitPersonalityValueImpl(Streamer, DL, Sym, MMI);
-}
-
-void TargetLoweringObjectFileELF::emitPersonalityValueImpl(
- MCStreamer &Streamer, const DataLayout &DL, const MCSymbol *Sym,
- const MachineModuleInfo *MMI) const {
- unsigned Size = DL.getPointerSize();
Streamer.emitSymbolValue(Sym, Size);
}
diff --git a/llvm/lib/Target/AArch64/AArch64MachineModuleInfo.cpp b/llvm/lib/Target/AArch64/AArch64MachineModuleInfo.cpp
deleted file mode 100644
index 8a655b166ee862..00000000000000
--- a/llvm/lib/Target/AArch64/AArch64MachineModuleInfo.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-//===--- AArch64MachineModuleInfo.cpp ---------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-/// \file
-/// AArch64 Machine Module Info.
-///
-//
-//===----------------------------------------------------------------------===//
-
-#include "AArch64MachineModuleInfo.h"
-#include "llvm/IR/Constants.h"
-#include "llvm/IR/Module.h"
-
-namespace llvm {
-
-AArch64MachineModuleInfo::AArch64MachineModuleInfo(const MachineModuleInfo &MMI)
- : MachineModuleInfoELF(MMI) {
- const Module *M = MMI.getModule();
- const auto *Flag = mdconst::extract_or_null<ConstantInt>(
- M->getModuleFlag("ptrauth-sign-personality"));
- if (Flag && Flag->getZExtValue() == 1)
- HasSignedPersonality = true;
- else
- HasSignedPersonality = false;
-}
-
-} // end namespace llvm
diff --git a/llvm/lib/Target/AArch64/AArch64MachineModuleInfo.h b/llvm/lib/Target/AArch64/AArch64MachineModuleInfo.h
deleted file mode 100644
index ba1eafd022a4be..00000000000000
--- a/llvm/lib/Target/AArch64/AArch64MachineModuleInfo.h
+++ /dev/null
@@ -1,35 +0,0 @@
-//===--- AArch64MachineModuleInfo.h -----------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-/// \file
-/// AArch64 Machine Module Info.
-///
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LIB_TARGET_AARCH64_AARCH64MACHINEMODULEINFO_H
-#define LLVM_LIB_TARGET_AARCH64_AARCH64MACHINEMODULEINFO_H
-
-#include "llvm/CodeGen/MachineModuleInfoImpls.h"
-
-namespace llvm {
-
-class AArch64MachineModuleInfo final : public MachineModuleInfoELF {
- /// HasSignedPersonality is true if the corresponding IR module has the
- /// "ptrauth-sign-personality" flag set to 1.
- bool HasSignedPersonality = false;
-
-public:
- AArch64MachineModuleInfo(const MachineModuleInfo &);
-
- bool hasSignedPersonality() const { return HasSignedPersonality; }
-};
-
-} // end namespace llvm
-
-#endif // LLVM_LIB_TARGET_AARCH64_AARCH64MACHINEMODULEINFO_H
diff --git a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
index f74861e1c41d40..54de42a094f340 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
@@ -7,10 +7,8 @@
//===----------------------------------------------------------------------===//
#include "AArch64TargetObjectFile.h"
-#include "AArch64MachineModuleInfo.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"
@@ -30,21 +28,6 @@ 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<AArch64MachineModuleInfo>().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 {
diff --git a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h
index 0c822ac84f200c..2ef8bda2988d47 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h
+++ b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h
@@ -35,10 +35,6 @@ class AArch64_ELFTargetObjectFile : public TargetLoweringObjectFileELF {
MachineModuleInfo *MMI, const MCSymbol *RawSym,
AArch64PACKey::ID Key,
uint16_t Discriminator) const;
-
- void emitPersonalityValueImpl(MCStreamer &Streamer, const DataLayout &DL,
- const MCSymbol *Sym,
- const MachineModuleInfo *MMI) const override;
};
/// AArch64_MachoTargetObjectFile - This TLOF implementation is used for Darwin.
diff --git a/llvm/lib/Target/AArch64/CMakeLists.txt b/llvm/lib/Target/AArch64/CMakeLists.txt
index c87f7de4efee3c..da13db8e68b0e6 100644
--- a/llvm/lib/Target/AArch64/CMakeLists.txt
+++ b/llvm/lib/Target/AArch64/CMakeLists.txt
@@ -67,7 +67,6 @@ add_llvm_target(AArch64CodeGen
AArch64LoadStoreOptimizer.cpp
AArch64LowerHomogeneousPrologEpilog.cpp
AArch64MachineFunctionInfo.cpp
- AArch64MachineModuleInfo.cpp
AArch64MachineScheduler.cpp
AArch64MacroFusion.cpp
AArch64MIPeepholeOpt.cpp
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.cpp
index 7bd89c9e29a728..dc5383ce941ed9 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.cpp
@@ -35,16 +35,6 @@ AArch64TargetStreamer::AArch64TargetStreamer(MCStreamer &S)
AArch64TargetStreamer::~AArch64TargetStreamer() = default;
-void AArch64TargetStreamer::emitAuthValue(const MCExpr *Expr,
- uint16_t Discriminator,
- AArch64PACKey::ID Key,
- bool HasAddressDiversity) {
- Streamer.emitValueImpl(AArch64AuthMCExpr::create(Expr, Discriminator, Key,
- HasAddressDiversity,
- Streamer.getContext()),
- 8);
-}
-
// The constant pool handling is shared by all AArch64TargetStreamer
// implementations.
const MCExpr *AArch64TargetStreamer::addConstantPoolEntry(const MCExpr *Expr,
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.h b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.h
index 1c0f5d848c00c6..ac441ae3b603ff 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.h
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.h
@@ -9,7 +9,6 @@
#ifndef LLVM_LIB_TARGET_AARCH64_MCTARGETDESC_AARCH64TARGETSTREAMER_H
#define LLVM_LIB_TARGET_AARCH64_MCTARGETDESC_AARCH64TARGETSTREAMER_H
-#include "AArch64MCExpr.h"
#include "llvm/MC/MCStreamer.h"
namespace {
@@ -39,11 +38,6 @@ class AArch64TargetStreamer : public MCTargetStreamer {
void emitNoteSection(unsigned Flags, uint64_t PAuthABIPlatform = -1,
uint64_t PAuthABIVersion = -1);
- /// Callback used to emit AUTH expressions (e.g. signed
- /// personality function pointer).
- void emitAuthValue(const MCExpr *Expr, uint16_t Discriminator,
- AArch64PACKey::ID Key, bool HasAddressDiversity);
-
/// Callback used to implement the .inst directive.
virtual void emitInst(uint32_t Inst);
diff --git a/llvm/lib/Target/TargetLoweringObjectFile.cpp b/llvm/lib/Target/TargetLoweringObjectFile.cpp
index 4fe9d13d062265..7d9b926f4c42b6 100644
--- a/llvm/lib/Target/TargetLoweringObjectFile.cpp
+++ b/llvm/lib/Target/TargetLoweringObjectFile.cpp
@@ -141,9 +141,10 @@ MCSymbol *TargetLoweringObjectFile::getCFIPersonalitySymbol(
return TM.getSymbol(GV);
}
-void TargetLoweringObjectFile::emitPersonalityValue(
- MCStreamer &Streamer, const DataLayout &, const MCSymbol *Sym,
- const MachineModuleInfo *MMI) const {}
+void TargetLoweringObjectFile::emitPersonalityValue(MCStreamer &Streamer,
+ const DataLayout &,
+ const MCSymbol *Sym) const {
+}
void TargetLoweringObjectFile::emitCGProfileMetadata(MCStreamer &Streamer,
Module &M) const {
diff --git a/llvm/test/CodeGen/AArch64/ptrauth-sign-personality.ll b/llvm/test/CodeGen/AArch64/ptrauth-sign-personality.ll
deleted file mode 100644
index d4ee49d9aeeabf..00000000000000
--- a/llvm/test/CodeGen/AArch64/ptrauth-sign-personality.ll
+++ /dev/null
@@ -1,39 +0,0 @@
-; RUN: llc -mtriple=aarch64-linux -filetype=asm %s -o - | FileCheck %s
-; RUN: llc -mtriple=aarch64-linux -filetype=obj %s -o - | \
-; RUN: llvm-readelf -r -x .data.DW.ref.__gxx_personality_v0 - | \
-; RUN: FileCheck --check-prefix=RELOC %s
-
- at _ZTISt9exception = external constant ptr
-
-define i32 @main() personality ptr @__gxx_personality_v0 {
-entry:
- invoke void @foo() to label %cont unwind label %lpad
-
-lpad:
- %0 = landingpad { ptr, i32 }
- catch ptr null
- catch ptr @_ZTISt9exception
- ret i32 0
-
-cont:
- ret i32 0
-}
-
-declare i32 @__gxx_personality_v0(...)
-
-declare void @foo()
-
-!llvm.module.flags = !{!0}
-!0 = !{i32 8, !"ptrauth-sign-personality", i32 1}
-
-; CHECK: DW.ref.__gxx_personality_v0:
-; CHECK-NEXT: .xword __gxx_personality_v0 at AUTH(ia,32429,addr)
-
-; RELOC: Relocation section '.rela.data.DW.ref.__gxx_personality_v0' at offset 0x2a0 contains 1 entries:
-; RELOC-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend
-; RELOC-NEXT: 0000000000000000 0000000f00000244 R_AARCH64_AUTH_ABS64 0000000000000000 __gxx_personality_v0 + 0
-
-; RELOC: Hex dump of section '.data.DW.ref.__gxx_personality_v0':
-; RELOC-NEXT: 0x00000000 00000000 ad7e0080
-; ^^^^ 0x7EAD = discriminator
-; ^^ 0b10000000: bit 63 = 1 -> address diversity enabled, bits 61:60 = 0b00 -> key is IA
diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/AArch64/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Target/AArch64/BUILD.gn
index 237fd73b705126..57570de8813751 100644
--- a/llvm/utils/gn/secondary/llvm/lib/Target/AArch64/BUILD.gn
+++ b/llvm/utils/gn/secondary/llvm/lib/Target/AArch64/BUILD.gn
@@ -135,7 +135,6 @@ static_library("LLVMAArch64CodeGen") {
"AArch64MCInstLower.cpp",
"AArch64MIPeepholeOpt.cpp",
"AArch64MachineFunctionInfo.cpp",
- "AArch64MachineModuleInfo.cpp",
"AArch64MachineScheduler.cpp",
"AArch64MacroFusion.cpp",
"AArch64PBQPRegAlloc.cpp",
More information about the llvm-branch-commits
mailing list