-
Notifications
You must be signed in to change notification settings - Fork 14.4k
Revert "[PAC][ELF][AArch64] Support signed personality function pointer" #119331
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-debuginfo @llvm/pr-subscribers-clang Author: Daniil Kovalev (kovdan01) ChangesReverts llvm/llvm-project#113148 See buildbot failure https://lab.llvm.org/buildbot/#/builders/190/builds/11048 Full diff: https://github.com/llvm/llvm-project/pull/119331.diff 16 Files Affected:
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",
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/146/builds/1803 Here is the relevant piece of the build log for the reference
|
Reverts #113148
See buildbot failure https://lab.llvm.org/buildbot/#/builders/190/builds/11048