From b3c49e956e7b36535739c5613c83e6ee3ea75d94 Mon Sep 17 00:00:00 2001 From: Renato Golin Date: Sun, 25 Jan 2015 23:17:48 +0000 Subject: [PATCH] Allows Clang to use LLVM's fixes-x18 option This patch allows clang to have llvm reserve the x18 platform register on AArch64. FreeBSD will use this in the kernel for per-cpu data but has no need to reserve this register in userland so will need this flag to reserve it. This uses llvm r226664 to allow this register to be reserved. Patch by Andrew Turner. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@227062 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Driver/Options.td | 2 ++ lib/Driver/Tools.cpp | 5 +++++ test/Driver/aarch64-fixed-x18.c | 4 ++++ 3 files changed, 11 insertions(+) create mode 100644 test/Driver/aarch64-fixed-x18.c diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index f96da51563..3d1b5bf68b 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -1218,6 +1218,8 @@ def mfix_cortex_a53_835769 : Flag<["-"], "mfix-cortex-a53-835769">, def mno_fix_cortex_a53_835769 : Flag<["-"], "mno-fix-cortex-a53-835769">, Group, HelpText<"Don't workaround Cortex-A53 erratum 835769 (AArch64 only)">; +def ffixed_x18 : Flag<["-"], "ffixed-x18">, Group, + HelpText<"Reserve the x18 register (AArch64 only)">; def mvsx : Flag<["-"], "mvsx">, Group; def mno_vsx : Flag<["-"], "mno-vsx">, Group; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 1f0d4f09f8..21c8580e32 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -958,6 +958,11 @@ void Clang::AddAArch64TargetArgs(const ArgList &Args, if (A->getOption().matches(options::OPT_mno_global_merge)) CmdArgs.push_back("-mno-global-merge"); } + + if (Args.hasArg(options::OPT_ffixed_x18)) { + CmdArgs.push_back("-backend-option"); + CmdArgs.push_back("-aarch64-reserve-x18"); + } } // Get CPU and ABI names. They are not independent diff --git a/test/Driver/aarch64-fixed-x18.c b/test/Driver/aarch64-fixed-x18.c new file mode 100644 index 0000000000..35d0caf032 --- /dev/null +++ b/test/Driver/aarch64-fixed-x18.c @@ -0,0 +1,4 @@ +// RUN: %clang -target aarch64-none-gnu -ffixed-x18 -### %s 2> %t +// RUN: FileCheck --check-prefix=CHECK-FIXED-X18 < %t %s + +// CHECK-FIXED-X18: "-backend-option" "-aarch64-reserve-x18" -- 2.40.0