[PATCH] D23610: [ARM] Add pre-defined macros for ROPI and RWPI
This revision was automatically updated to reflect the committed changes. Closed by commit rL354265: [ARM] Add pre-defined macros for ROPI and RWPI (authored by olista01, committed by ). Changed prior to commit: https://reviews.llvm.org/D23610?vs=91990=187220#toc Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D23610/new/ https://reviews.llvm.org/D23610 Files: cfe/trunk/include/clang/Basic/LangOptions.def cfe/trunk/include/clang/Driver/Options.td cfe/trunk/lib/Basic/Targets/ARM.cpp cfe/trunk/lib/Driver/ToolChains/Clang.cpp cfe/trunk/lib/Frontend/CompilerInvocation.cpp cfe/trunk/test/Preprocessor/arm-pic-predefines.c Index: cfe/trunk/lib/Driver/ToolChains/Clang.cpp === --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp @@ -3810,6 +3810,13 @@ 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"); CmdArgs.push_back(A->getValue()); Index: cfe/trunk/lib/Basic/Targets/ARM.cpp === --- cfe/trunk/lib/Basic/Targets/ARM.cpp +++ cfe/trunk/lib/Basic/Targets/ARM.cpp @@ -652,6 +652,12 @@ if (SoftFloat) Builder.defineMacro("__SOFTFP__"); + // ACLE position independent code macros. + if (Opts.ROPI) +Builder.defineMacro("__ARM_ROPI", "1"); + if (Opts.RWPI) +Builder.defineMacro("__ARM_RWPI", "1"); + if (ArchKind == llvm::ARM::ArchKind::XSCALE) Builder.defineMacro("__XSCALE__"); Index: cfe/trunk/lib/Frontend/CompilerInvocation.cpp === --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp @@ -2662,6 +2662,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: cfe/trunk/include/clang/Basic/LangOptions.def === --- cfe/trunk/include/clang/Basic/LangOptions.def +++ cfe/trunk/include/clang/Basic/LangOptions.def @@ -170,6 +170,8 @@ VALUE_LANGOPT(AlignDouble, 1, 0, "Controls if doubles should be aligned to 8 bytes (x86 only)") COMPATIBLE_VALUE_LANGOPT(PICLevel, 2, 0, "__PIC__ level") COMPATIBLE_VALUE_LANGOPT(PIE , 1, 0, "is pie") +LANGOPT(ROPI , 1, 0, "Read-only position independence") +LANGOPT(RWPI , 1, 0, "Read-write position independence") COMPATIBLE_LANGOPT(GNUInline , 1, 0, "GNU inline semantics") COMPATIBLE_LANGOPT(NoInlineDefine, 1, 0, "__NO_INLINE__ predefined macro") COMPATIBLE_LANGOPT(Deprecated, 1, 0, "__DEPRECATED predefined macro") Index: cfe/trunk/include/clang/Driver/Options.td === --- cfe/trunk/include/clang/Driver/Options.td +++ cfe/trunk/include/clang/Driver/Options.td @@ -1606,9 +1606,9 @@ HelpText<"Use the PLT to make function calls">; def fno_plt : Flag<["-"], "fno-plt">, Group, Flags<[CC1Option]>, HelpText<"Do not use the PLT to make function calls">; -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_EQ : Joined<["-"], "fplugin=">, Group, Flags<[DriverOption]>, MetaVarName<"">, HelpText<"Load the named plugin (dynamic shared object)">; Index: cfe/trunk/test/Preprocessor/arm-pic-predefines.c === --- cfe/trunk/test/Preprocessor/arm-pic-predefines.c +++ cfe/trunk/test/Preprocessor/arm-pic-predefines.c @@ -0,0 +1,14 @@ +// REQUIRES: arm-registered-target + +// RUN: %clang -target armv8--none-eabi -x c -E -dM %s -o - | FileCheck %s --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=ROPI--check-prefix=NO-RWPI +// RUN: %clang -target armv8--none-eabi -x c -E -dM %s -o - -frwpi| FileCheck %s --check-prefix=NO-ROPI
[PATCH] D23610: [ARM] Add pre-defined macros for ROPI and RWPI
olista01 added a comment. Yes, the back-end work was all done years ago, I just also forgot about these while waiting for the ACLE to be published. Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D23610/new/ https://reviews.llvm.org/D23610 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D23610: [ARM] Add pre-defined macros for ROPI and RWPI
rengolin accepted this revision. rengolin added a comment. This revision is now accepted and ready to land. Sorry for the delay, this fell out of my radar and just saw the ping now. Given it's in ACLE and there are only mechanical (obvious) changes, LGTM. I'm assuming those two parameters are already accepted in the LLVM back-end, right? Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D23610/new/ https://reviews.llvm.org/D23610 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D23610: [ARM] Add pre-defined macros for ROPI and RWPI
olista01 added a comment. These macros have been in the published ACLE for a while now: https://developer.arm.com/products/software-development-tools/compilers/arm-compiler-5/docs/101028/latest/5-feature-test-macros#position-independent-code Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D23610/new/ https://reviews.llvm.org/D23610 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D23610: [ARM] Add pre-defined macros for ROPI and RWPI
kahmed added a comment. Herald added subscribers: llvm-commits, jdoerfert, kristof.beyls, javed.absar. Herald added a project: LLVM. Ping Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D23610/new/ https://reviews.llvm.org/D23610 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D23610: [ARM] Add pre-defined macros for ROPI and RWPI
olista01 added a comment. Ping. 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 and RWPI
olista01 updated this revision to Diff 91990. olista01 retitled this revision from "[ARM] Add pre-defined macros for ROPI, RWPI and FPIC" to "[ARM] Add pre-defined macros for ROPI and RWPI". olista01 edited the summary of this revision. 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/ToolChains/Clang.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,14 @@ +// REQUIRES: arm-registered-target + +// RUN: %clang -target armv8--none-eabi -x c -E -dM %s -o - | FileCheck %s --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=ROPI--check-prefix=NO-RWPI +// RUN: %clang -target armv8--none-eabi -x c -E -dM %s -o - -frwpi| FileCheck %s --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=ROPI--check-prefix=RWPI + +// Pre-defined macros for position-independence modes + +// NO-ROPI-NOT: #define __APCS_ROPI +// ROPI: #define __ARM_ROPI + +// NO-RWPI-NOT: #define __APCS_RWPI +// RWPI: #define __ARM_RWPI Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -2071,6 +2071,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/ToolChains/Clang.cpp === --- lib/Driver/ToolChains/Clang.cpp +++ lib/Driver/ToolChains/Clang.cpp @@ -2193,6 +2193,13 @@ 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"); CmdArgs.push_back(A->getValue()); Index: lib/Basic/Targets.cpp === --- lib/Basic/Targets.cpp +++ lib/Basic/Targets.cpp @@ -5577,6 +5577,12 @@ if (ArchKind == llvm::ARM::AK_ARMV8_1A) Builder.defineMacro("__ARM_FEATURE_QRDMX", "1"); + +// ACLE position independent code macros. +if (Opts.ROPI) + Builder.defineMacro("__ARM_ROPI", "1"); +if (Opts.RWPI) + Builder.defineMacro("__ARM_RWPI", "1"); } ArrayRef getTargetBuiltins() const override { Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1275,9 +1275,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_EQ : Joined<["-"], "fplugin=">, Group, Flags<[DriverOption]>, MetaVarName<"">, HelpText<"Load the named plugin (dynamic shared object)">; Index: include/clang/Basic/LangOptions.def === --- include/clang/Basic/LangOptions.def +++ include/clang/Basic/LangOptions.def @@ -163,6 +163,8 @@ VALUE_LANGOPT(AlignDouble, 1, 0, "Controls if doubles should be aligned to 8 bytes (x86 only)") COMPATIBLE_VALUE_LANGOPT(PICLevel, 2, 0, "__PIC__ level") COMPATIBLE_VALUE_LANGOPT(PIE , 1, 0, "is pie") +LANGOPT(ROPI , 1, 0, "Read-only position independence") +LANGOPT(RWPI , 1, 0, "Read-write position independence") COMPATIBLE_LANGOPT(GNUInline , 1, 0, "GNU inline semantics") COMPATIBLE_LANGOPT(NoInlineDefine, 1, 0, "__NO_INLINE__ predefined macro") COMPATIBLE_LANGOPT(Deprecated, 1, 0, "__DEPRECATED predefined macro") Index: test/Preprocessor/arm-pic-predefines.c