[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