llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-driver Author: Fangrui Song (MaskRay) <details> <summary>Changes</summary> `arm-linux-gnueabihf-gcc -c -fpic -mfdpic -Wa,--fdpic a.c` compiles a.c with FDPIC codegen and assembles the assembly file with `--fdpic`. This patch implements -Wa,--fdpic for the driver when using the integrated assembler. --- Full diff: https://github.com/llvm/llvm-project/pull/82188.diff 5 Files Affected: - (modified) clang/include/clang/Driver/Options.td (+2) - (modified) clang/lib/Driver/ToolChains/Clang.cpp (+4) - (modified) clang/test/Driver/arm-ias-Wa.s (+2) - (added) clang/test/Misc/cc1as-arm-fdpic.s (+10) - (modified) clang/tools/driver/cc1as_main.cpp (+4) ``````````diff diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 53f23f9abb4c96..da0ebbc1f0b607 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -7954,6 +7954,8 @@ def dwarf_debug_producer : Separate<["-"], "dwarf-debug-producer">, def defsym : Separate<["-"], "defsym">, HelpText<"Define a value for a symbol">; +def fdpic : Flag<["--"], "fdpic">, HelpText<"Enable FDPIC ABI (ARM only)">; + } // let Visibility = [CC1AsOption] //===----------------------------------------------------------------------===// diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 47305f798c5fee..b4cc79df8dab7b 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -2530,6 +2530,10 @@ static void CollectArgsForIntegratedAssembler(Compilation &C, case llvm::Triple::thumbeb: case llvm::Triple::arm: case llvm::Triple::armeb: + if (Value == "--fdpic") { + CmdArgs.push_back("--fdpic"); + continue; + } if (Value.starts_with("-mimplicit-it=")) { // Only store the value; the last value set takes effect. ImplicitIt = Value.split("=").second; diff --git a/clang/test/Driver/arm-ias-Wa.s b/clang/test/Driver/arm-ias-Wa.s index b82ce8dfb31ab3..73d6bb88045176 100644 --- a/clang/test/Driver/arm-ias-Wa.s +++ b/clang/test/Driver/arm-ias-Wa.s @@ -79,3 +79,5 @@ // RUN: | FileCheck -check-prefix=CHECK-M-PROFILE %s // CHECK-M-PROFILE: "-triple" "thumbv7m-{{.*}}" +// RUN: %clang --target=arm-unknown-linuxfdpiceabi -Wa,--fdpic -c %s -### 2>&1 | FileCheck --check-prefix=FDPIC %s +// FDPIC: "--fdpic" diff --git a/clang/test/Misc/cc1as-arm-fdpic.s b/clang/test/Misc/cc1as-arm-fdpic.s new file mode 100644 index 00000000000000..cc6438558eeb58 --- /dev/null +++ b/clang/test/Misc/cc1as-arm-fdpic.s @@ -0,0 +1,10 @@ +// REQUIRES: arm-registered-target + +// RUN: %clang -cc1as -triple armv7-unknown-linuxfdpiceabi -filetype obj --fdpic %s -o %t +// RUN: llvm-readelf -h -r %t | FileCheck %s + +// CHECK: OS/ABI: ARM FDPIC +// CHECK: R_ARM_FUNCDESC + +.data +.word f(FUNCDESC) diff --git a/clang/tools/driver/cc1as_main.cpp b/clang/tools/driver/cc1as_main.cpp index a55e06500d9d92..2d97769b786265 100644 --- a/clang/tools/driver/cc1as_main.cpp +++ b/clang/tools/driver/cc1as_main.cpp @@ -154,6 +154,8 @@ struct AssemblerInvocation { LLVM_PREFERRED_TYPE(bool) unsigned IncrementalLinkerCompatible : 1; LLVM_PREFERRED_TYPE(bool) + unsigned FDPIC : 1; + LLVM_PREFERRED_TYPE(bool) unsigned EmbedBitcode : 1; /// Whether to emit DWARF unwind info. @@ -346,6 +348,7 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts, Opts.FatalWarnings = Args.hasArg(OPT_massembler_fatal_warnings); Opts.NoWarn = Args.hasArg(OPT_massembler_no_warn); Opts.NoTypeCheck = Args.hasArg(OPT_mno_type_check); + Opts.FDPIC = Args.hasArg(OPT_fdpic); Opts.RelocationModel = std::string(Args.getLastArgValue(OPT_mrelocation_model, "pic")); Opts.TargetABI = std::string(Args.getLastArgValue(OPT_target_abi)); @@ -520,6 +523,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, MCOptions.MCNoWarn = Opts.NoWarn; MCOptions.MCFatalWarnings = Opts.FatalWarnings; MCOptions.MCNoTypeCheck = Opts.NoTypeCheck; + MCOptions.FDPIC = Opts.FDPIC; MCOptions.ABIName = Opts.TargetABI; // FIXME: There is a bit of code duplication with addPassesToEmitFile. `````````` </details> https://github.com/llvm/llvm-project/pull/82188 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits