Author: Daniil Kovalev Date: 2024-12-10T09:12:25+03:00 New Revision: ef2e590e7b6fb5b0478e5e087006895a07d185c8
URL: https://github.com/llvm/llvm-project/commit/ef2e590e7b6fb5b0478e5e087006895a07d185c8 DIFF: https://github.com/llvm/llvm-project/commit/ef2e590e7b6fb5b0478e5e087006895a07d185c8.diff LOG: Revert "[PAC][ELF][AArch64] Support signed personality function pointer" (#119331) Reverts llvm/llvm-project#113148 See buildbot failure https://lab.llvm.org/buildbot/#/builders/190/builds/11048 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 - -@_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@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", _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits