[PATCH] D130145: [AArch64] Simplify BTI/PAC-RET module flags

Daniel Kiss via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 25 01:18:52 PDT 2022


danielkiss added inline comments.


================
Comment at: llvm/lib/IR/AutoUpgrade.cpp:4415-4430
-    // Upgrade branch protection and return address signing module flags. The
-    // module flag behavior for these fields were Error and now they are Min.
-    if (ID->getString() == "branch-target-enforcement" ||
-        ID->getString().startswith("sign-return-address")) {
-      if (auto *Behavior =
-              mdconst::dyn_extract_or_null<ConstantInt>(Op->getOperand(0))) {
-        if (Behavior->getLimitedValue() == Module::Error) {
----------------
MaskRay wrote:
> danielkiss wrote:
> > In a full LTO build the linker will complain about the mis match between the flags if one of the objects compiled with an older compiler that emitted `Module:Error` for these flags.
> The new approach doesnot emit a flag for 0 value, so there won't be an error even with old bitcode files using `Error`.
older compiler could emit `Module:Error` with 0 and with this patch we emit 1 with `min` so the linker will stop with 
`ld.lld: error: linking module flags 'branch-target-enforcement': IDs have conflicting behaviors in 'foo.o' and 'ld-temp.o'`

```
clang++-13 -flto=full -c foo.cpp -o foo.o
../build/bin/clang++ -flto=full -c main.cpp -o main.o -mbranch-protection=standard
../build/bin/clang++ -fuse-ld=lld main.o foo.o -o a.out
```



Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D130145



More information about the llvm-commits mailing list