MaggieYi added a comment.

Thanks  @simon_tatham and @MaskRay for the quick code review.

When I work on this issue, I want to add an error for both clang and clang 
-cc1. 
`-mexecute-only` is an ARM-only compiler option. The clang Driver will convert 
`-mexecute-only` to `-target-feature +execute-only` in the clang cc1 command.
To pass the `execute-only` option, the clang command is: `clang 
-target=armv6t2-eabi -mexecute-only …`. The Arm clang cc1 command:
`clang -cc1 -triple armv6t2-unknown-unknown-eabi -target-feature 
+execute-only…`.

If I move the change to the code in Driver/ToolChains/Arch/ARM.cpp, the error 
will only deal with the `-mexecute-only` option, but not handle the 
`-target-feature +execute-only` in the `clang -cc1` command.

As @MaskRay commented that we don't perform rigid error checking for cc1. In 
this case, we could handle the error in the Driver/ToolChains/Arch/ARM.cpp. 
However, the target-specific predicate function (named isExecuteOnlyTarget) 
allows any other targets that support execute-only could get the effect by 
modifying just the `isExecuteOnlyTarget` function. Therefore, I have modified 
the `isExecuteOnlyTarget` function to only deal with the `-mexecute-only` 
option. I have also added a function (named ARM::supportedExecuteOnly) to avoid 
the duplicated code.



================
Comment at: clang/include/clang/Basic/DiagnosticCommonKinds.td:326
 def err_unsupported_abi_for_opt : Error<"'%0' can only be used with the '%1' 
ABI">;
+def err_unsupported_opt_for_execute_only_target
+    : Error<"unsupported option '%0' for the execute only target '%1'">;
----------------
MaskRay wrote:
> We don't need this diagnostic as a common kind (we only use it in driver).
> 
> I think we can reuse `err_drv_argument_not_allowed_with` . Though for PS5 you 
> will get `... allowed with '-mexecute-only'` even if the user doesn't specify 
> `-mexecute-only`, but I hope it is fine.
Since `err_drv_argument_not_allowed_with` is an ARM-only option, We cannot 
reuse it.


================
Comment at: clang/lib/Driver/SanitizerArgs.cpp:406
+        if (SanitizerMask KindsToDiagnose =
+                Add & NotAllowedWithExecuteOnly & ~DiagnosedKinds) {
+          if (DiagnoseErrors)
----------------
MaskRay wrote:
> I think it's clear not not to add the variable `NotAllowedWithExecuteOnly`.
> 
> Currently, I need to check the definition of `NotAllowedWithExecuteOnly` to 
> understand that this comment does what it says. For now, just encoding 
> `Function` here is clearer.
`NotAllowedWithExecuteOnly` is modified to include the `SanitizerKind::KCFI`, 
therefore I keep it in the code.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D158614/new/

https://reviews.llvm.org/D158614

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

Reply via email to