forked from OSchip/llvm-project
Revert "[AArch64] Add -mmark-bti-property flag."
This reverts commit 95e43f84b7
.
This commit is contained in:
parent
5b205ff474
commit
60e244f82c
|
@ -2385,9 +2385,6 @@ def mfix_cortex_a53_835769 : Flag<["-"], "mfix-cortex-a53-835769">,
|
|||
def mno_fix_cortex_a53_835769 : Flag<["-"], "mno-fix-cortex-a53-835769">,
|
||||
Group<m_aarch64_Features_Group>,
|
||||
HelpText<"Don't workaround Cortex-A53 erratum 835769 (AArch64 only)">;
|
||||
def mmark_bti_property : Flag<["-"], "mmark-bti-property">,
|
||||
Group<m_aarch64_Features_Group>,
|
||||
HelpText<"Add .note.gnu.property with BTI to assembly files (AArch64 only)">;
|
||||
foreach i = {1-31} in
|
||||
def ffixed_x#i : Flag<["-"], "ffixed-x"#i>, Group<m_Group>,
|
||||
HelpText<"Reserve the x"#i#" register (AArch64/RISC-V only)">;
|
||||
|
|
|
@ -7018,15 +7018,6 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
}
|
||||
break;
|
||||
|
||||
case llvm::Triple::aarch64:
|
||||
case llvm::Triple::aarch64_32:
|
||||
case llvm::Triple::aarch64_be:
|
||||
if (Args.hasArg(options::OPT_mmark_bti_property)) {
|
||||
CmdArgs.push_back("-mllvm");
|
||||
CmdArgs.push_back("-aarch64-mark-bti-property");
|
||||
}
|
||||
break;
|
||||
|
||||
case llvm::Triple::riscv32:
|
||||
case llvm::Triple::riscv64:
|
||||
AddRISCVTargetArgs(Args, CmdArgs);
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
// When -mmark-bti-property is passed the generated file object gets BTI marking.
|
||||
// RUN: %clang -target arm64-linux-none -mmark-bti-property -c -o - %s | llvm-readobj -n - | FileCheck -check-prefix=CHECK -check-prefix=CHECK_GEN %s
|
||||
// RUN: %clang -target arm64-linux-none -DNOTE_PRESENT -c %s -o - | llvm-readobj -n - | FileCheck -check-prefix=CHECK -check-prefix=CHECK_PRESET %s
|
||||
// RUN: %clang -target arm64-linux-none -mmark-bti-property -DNOTE_PRESENT -c %s -o - | llvm-readobj -n - | FileCheck -check-prefix=CHECK -check-prefix=CHECK_PRESET %s
|
||||
// RUN: %clang -target arm64-linux-none -mmark-bti-property -DNOTE_PRESENT -c %s -o - 2>&1 | FileCheck -check-prefix=CHECK_WARNING %s
|
||||
//
|
||||
// CHECK_WARNING: The .note.gnu.property is not emitted because it is already present.
|
||||
// CHECK: Name: .note.gnu.property
|
||||
// CHECK: Type: NT_GNU_PROPERTY_TYPE_0
|
||||
// CHECK_GEN: aarch64 feature: BTI
|
||||
// CHECK_PRESET: aarch64 feature: BTI, PAC
|
||||
|
||||
#ifdef NOTE_PRESENT
|
||||
.section .note.gnu.property, "a";
|
||||
.balign 8;
|
||||
.long 4;
|
||||
.long 0x10;
|
||||
.long 0x5
|
||||
.asciz "GNU"
|
||||
.long 0xc0000000
|
||||
.long 4
|
||||
.long 3
|
||||
.long 0
|
||||
#endif
|
|
@ -223,9 +223,26 @@ void AArch64AsmPrinter::emitStartOfAsmFile(Module &M) {
|
|||
return;
|
||||
|
||||
// Emit a .note.gnu.property section with the flags.
|
||||
if (auto *TS = static_cast<AArch64TargetStreamer *>(
|
||||
OutStreamer->getTargetStreamer()))
|
||||
TS->emitNoteSection(Flags);
|
||||
MCSection *Cur = OutStreamer->getCurrentSectionOnly();
|
||||
MCSection *Nt = MMI->getContext().getELFSection(
|
||||
".note.gnu.property", ELF::SHT_NOTE, ELF::SHF_ALLOC);
|
||||
OutStreamer->SwitchSection(Nt);
|
||||
|
||||
// Emit the note header.
|
||||
emitAlignment(Align(8));
|
||||
OutStreamer->emitInt32(4); // data size for "GNU\0"
|
||||
OutStreamer->emitInt32(4 * 4); // Elf_Prop size
|
||||
OutStreamer->emitInt32(ELF::NT_GNU_PROPERTY_TYPE_0);
|
||||
OutStreamer->emitBytes(StringRef("GNU", 4)); // note name
|
||||
|
||||
// Emit the PAC/BTI properties.
|
||||
OutStreamer->emitInt32(ELF::GNU_PROPERTY_AARCH64_FEATURE_1_AND);
|
||||
OutStreamer->emitInt32(4); // data size
|
||||
OutStreamer->emitInt32(Flags); // data
|
||||
OutStreamer->emitInt32(0); // pad
|
||||
|
||||
OutStreamer->endSection(Nt);
|
||||
OutStreamer->SwitchSection(Cur);
|
||||
}
|
||||
|
||||
void AArch64AsmPrinter::emitFunctionHeaderComment() {
|
||||
|
|
|
@ -11,23 +11,12 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "AArch64TargetStreamer.h"
|
||||
#include "AArch64MCAsmInfo.h"
|
||||
#include "AArch64Subtarget.h"
|
||||
#include "llvm/BinaryFormat/ELF.h"
|
||||
#include "llvm/MC/ConstantPools.h"
|
||||
#include "llvm/MC/MCContext.h"
|
||||
#include "llvm/MC/MCSection.h"
|
||||
#include "llvm/MC/MCSectionELF.h"
|
||||
#include "llvm/MC/MCSubtargetInfo.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
static cl::opt<bool> MarkBTIProperty(
|
||||
"aarch64-mark-bti-property", cl::Hidden,
|
||||
cl::desc("Add .note.gnu.property with BTI to assembly files"),
|
||||
cl::init(false));
|
||||
|
||||
//
|
||||
// AArch64TargetStreamer Implemenation
|
||||
//
|
||||
|
@ -48,50 +37,8 @@ void AArch64TargetStreamer::emitCurrentConstantPool() {
|
|||
ConstantPools->emitForCurrentSection(Streamer);
|
||||
}
|
||||
|
||||
// finish() - write out any non-empty assembler constant pools and
|
||||
// write out note.gnu.properties if need.
|
||||
void AArch64TargetStreamer::finish() {
|
||||
ConstantPools->emitAll(Streamer);
|
||||
|
||||
if (MarkBTIProperty)
|
||||
emitNoteSection(ELF::GNU_PROPERTY_AARCH64_FEATURE_1_BTI);
|
||||
}
|
||||
|
||||
void AArch64TargetStreamer::emitNoteSection(unsigned Flags) {
|
||||
if (Flags == 0)
|
||||
return;
|
||||
|
||||
MCStreamer &OutStreamer = getStreamer();
|
||||
MCContext &Context = OutStreamer.getContext();
|
||||
// Emit a .note.gnu.property section with the flags.
|
||||
MCSectionELF *Nt = Context.getELFSection(".note.gnu.property", ELF::SHT_NOTE,
|
||||
ELF::SHF_ALLOC);
|
||||
if (Nt->isRegistered()) {
|
||||
SMLoc Loc;
|
||||
Context.reportWarning(
|
||||
Loc,
|
||||
"The .note.gnu.property is not emitted because it is already present.");
|
||||
return;
|
||||
}
|
||||
MCSection *Cur = OutStreamer.getCurrentSectionOnly();
|
||||
OutStreamer.SwitchSection(Nt);
|
||||
|
||||
// Emit the note header.
|
||||
OutStreamer.emitValueToAlignment(Align(8).value());
|
||||
OutStreamer.emitIntValue(4, 4); // data size for "GNU\0"
|
||||
OutStreamer.emitIntValue(4 * 4, 4); // Elf_Prop size
|
||||
OutStreamer.emitIntValue(ELF::NT_GNU_PROPERTY_TYPE_0, 4);
|
||||
OutStreamer.emitBytes(StringRef("GNU", 4)); // note name
|
||||
|
||||
// Emit the PAC/BTI properties.
|
||||
OutStreamer.emitIntValue(ELF::GNU_PROPERTY_AARCH64_FEATURE_1_AND, 4);
|
||||
OutStreamer.emitIntValue(4, 4); // data size
|
||||
OutStreamer.emitIntValue(Flags, 4); // data
|
||||
OutStreamer.emitIntValue(0, 4); // pad
|
||||
|
||||
OutStreamer.endSection(Nt);
|
||||
OutStreamer.SwitchSection(Cur);
|
||||
}
|
||||
// finish() - write out any non-empty assembler constant pools.
|
||||
void AArch64TargetStreamer::finish() { ConstantPools->emitAll(Streamer); }
|
||||
|
||||
void AArch64TargetStreamer::emitInst(uint32_t Inst) {
|
||||
char Buffer[4];
|
||||
|
|
|
@ -33,9 +33,6 @@ public:
|
|||
/// Emit contents of constant pool for the current section.
|
||||
void emitCurrentConstantPool();
|
||||
|
||||
/// Callback used to implement the .note.gnu.property section.
|
||||
void emitNoteSection(unsigned Flags);
|
||||
|
||||
/// Callback used to implement the .inst directive.
|
||||
virtual void emitInst(uint32_t Inst);
|
||||
|
||||
|
|
Loading…
Reference in New Issue