[PATCH] D23610: [ARM] Add pre-defined macros for ROPI, RWPI and FPIC

2017-03-16 Thread Oliver Stannard via Phabricator via cfe-commits
olista01 added a comment.

My patch to the ACLE has now been accepted, so it will be in the next release. 
This is the wording:

  __ARM_ROPI is defined to 1 if the translation unit is being compiled in 
read-only position independent mode. In this mode, all read-only data and 
functions are at a link-time constant offset from the program counter.
  
  __ARM_RWPI is defined to 1 if the translation unit is being compiled in 
read-write position independent mode. In this mode, all writable data is at a 
link-time constant offset from the static base register defined in [AAPCS].
  
  The ROPI and RWPI position independence modes are compatible with each other, 
so the __ARM_ROPI and __ARM_RWPI macros may be defined at the same time.

We're not adding the FPIC macro to the ACLE, because that isn't ARM-specific.


Repository:
  rL LLVM

https://reviews.llvm.org/D23610



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D23610: [ARM] Add pre-defined macros for ROPI, RWPI and FPIC

2016-12-14 Thread Oliver Stannard via Phabricator via cfe-commits
olista01 added a comment.

I've proposed a patch to the ACLE to add these macros, but it's stalled in 
review. I've just given it a ping, I'll try to get an answer soon.


Repository:
  rL LLVM

https://reviews.llvm.org/D23610



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D23610: [ARM] Add pre-defined macros for ROPI, RWPI and FPIC

2016-12-12 Thread Renato Golin via Phabricator via cfe-commits
rengolin added a comment.

Was this abandoned?


Repository:
  rL LLVM

https://reviews.llvm.org/D23610



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D23610: [ARM] Add pre-defined macros for ROPI, RWPI and FPIC

2016-08-17 Thread Tim Northover via cfe-commits
t.p.northover added inline comments.


Comment at: lib/Basic/Targets.cpp:5316
@@ +5315,3 @@
+if (Opts.PICLevel)
+  Builder.defineMacro("__APCS_FPIC", "1");
+if (Opts.ROPI)

These names are pretty bad from a modern perspective (with APCS deprecated and 
almost entirely forgotten outside iOS). It's the kind of thing it would be good 
for the ACLE to cover, would they be likely to consider it?


Repository:
  rL LLVM

https://reviews.llvm.org/D23610



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D23610: [ARM] Add pre-defined macros for ROPI, RWPI and FPIC

2016-08-17 Thread Oliver Stannard via cfe-commits
olista01 created this revision.
olista01 added reviewers: rengolin, t.p.northover.
olista01 added a subscriber: cfe-commits.
olista01 set the repository for this revision to rL LLVM.
Herald added subscribers: samparker, rengolin, aemerson.

This adds pre-defined macros to test for code being compiled in the FPIC, ROPI 
and RWPI position-independence modes. The names of the macros match those used 
by armcc, which also implements all of the PIC modes.

Repository:
  rL LLVM

https://reviews.llvm.org/D23610

Files:
  include/clang/Basic/LangOptions.def
  include/clang/Driver/Options.td
  lib/Basic/Targets.cpp
  lib/Driver/Tools.cpp
  lib/Frontend/CompilerInvocation.cpp
  test/Preprocessor/arm-pic-predefines.c

Index: test/Preprocessor/arm-pic-predefines.c
===
--- /dev/null
+++ test/Preprocessor/arm-pic-predefines.c
@@ -0,0 +1,20 @@
+// REQUIRES: aarch64-registered-target
+// REQUIRES: arm-registered-target
+//
+// RUN: %clang -target armv8--none-eabi   -x c -E -dM %s -o -   | FileCheck %s --check-prefix=NO-FPIC --check-prefix=NO-ROPI --check-prefix=NO-RWPI
+// RUN: %clang -target armv8--none-eabi   -x c -E -dM %s -o - -fpic | FileCheck %s --check-prefix=FPIC--check-prefix=NO-ROPI --check-prefix=NO-RWPI
+// RUN: %clang -target armv8--none-eabi   -x c -E -dM %s -o - -fropi| FileCheck %s --check-prefix=NO-FPIC --check-prefix=ROPI--check-prefix=NO-RWPI
+// RUN: %clang -target armv8--none-eabi   -x c -E -dM %s -o - -frwpi| FileCheck %s --check-prefix=NO-FPIC --check-prefix=NO-ROPI --check-prefix=RWPI
+// RUN: %clang -target armv8--none-eabi   -x c -E -dM %s -o - -fropi -frwpi | FileCheck %s --check-prefix=NO-FPIC --check-prefix=ROPI--check-prefix=RWPI
+// RUN: %clang -target aarch64--none-eabi -x c -E -dM %s -o - -fpic | FileCheck %s --check-prefix=FPIC--check-prefix=NO-ROPI --check-prefix=NO-RWPI
+
+// Pre-defined macros for position-independence modes
+
+// NO-FPIC-NOT: #define __APCS_FPIC
+// FPIC: #define __APCS_FPIC
+
+// NO-ROPI-NOT: #define __APCS_ROPI
+// ROPI: #define __APCS_ROPI
+
+// NO-RWPI-NOT: #define __APCS_RWPI
+// RWPI: #define __APCS_RWPI
Index: lib/Frontend/CompilerInvocation.cpp
===
--- lib/Frontend/CompilerInvocation.cpp
+++ lib/Frontend/CompilerInvocation.cpp
@@ -1933,6 +1933,8 @@
   Opts.MaxTypeAlign = getLastArgIntValue(Args, OPT_fmax_type_align_EQ, 0, Diags);
   Opts.AlignDouble = Args.hasArg(OPT_malign_double);
   Opts.PICLevel = getLastArgIntValue(Args, OPT_pic_level, 0, Diags);
+  Opts.ROPI = Args.hasArg(OPT_fropi);
+  Opts.RWPI = Args.hasArg(OPT_frwpi);
   Opts.PIE = Args.hasArg(OPT_pic_is_pie);
   Opts.Static = Args.hasArg(OPT_static_define);
   Opts.DumpRecordLayoutsSimple = Args.hasArg(OPT_fdump_record_layouts_simple);
Index: lib/Driver/Tools.cpp
===
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -4143,6 +4143,12 @@
 if (IsPIE)
   CmdArgs.push_back("-pic-is-pie");
   }
+  if (RelocationModel == llvm::Reloc::ROPI ||
+  RelocationModel == llvm::Reloc::ROPI_RWPI)
+CmdArgs.push_back("-fropi");
+  if (RelocationModel == llvm::Reloc::RWPI ||
+  RelocationModel == llvm::Reloc::ROPI_RWPI)
+CmdArgs.push_back("-frwpi");
 
   if (Arg *A = Args.getLastArg(options::OPT_meabi)) {
 CmdArgs.push_back("-meabi");
Index: lib/Basic/Targets.cpp
===
--- lib/Basic/Targets.cpp
+++ lib/Basic/Targets.cpp
@@ -5311,6 +5311,13 @@
 
 if (ArchKind == llvm::ARM::AK_ARMV8_1A)
   Builder.defineMacro("__ARM_FEATURE_QRDMX", "1");
+
+if (Opts.PICLevel)
+  Builder.defineMacro("__APCS_FPIC", "1");
+if (Opts.ROPI)
+  Builder.defineMacro("__APCS_ROPI", "1");
+if (Opts.RWPI)
+  Builder.defineMacro("__APCS_RWPI", "1");
   }
 
   ArrayRef getTargetBuiltins() const override {
@@ -5830,6 +5837,9 @@
 Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
 Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
 Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
+
+if (Opts.PICLevel)
+  Builder.defineMacro("__APCS_FPIC", "1");
   }
 
   ArrayRef getTargetBuiltins() const override {
Index: include/clang/Driver/Options.td
===
--- include/clang/Driver/Options.td
+++ include/clang/Driver/Options.td
@@ -1089,9 +1089,9 @@
 def fno_pic : Flag<["-"], "fno-pic">, Group;
 def fpie : Flag<["-"], "fpie">, Group;
 def fno_pie : Flag<["-"], "fno-pie">, Group;
-def fropi : Flag<["-"], "fropi">, Group;
+def fropi : Flag<["-"], "fropi">, Group, Flags<[CC1Option]>;
 def fno_ropi : Flag<["-"], "fno-ropi">, Group;
-def frwpi : Flag<["-"], "frwpi">, Group;
+def frwpi : Flag<["-"], "frwpi">, Group, Flags<[CC1Option]>;
 def fno_rwpi : Flag<["-"], "fno-rwpi">, Group;
 def fplugin_