[PATCH] D130145: [AArch64] Simplify BTI/PAC-RET module flags
Fangrui Song via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 25 09:09:09 PDT 2022
MaskRay marked an inline comment as done.
MaskRay 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) {
----------------
danielkiss wrote:
> 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
> ```
>
Perhaps we should respect the Error for older llvm and not try fixing it for regular LTO? If you feel this is strongly needed, I'll have to restore this chunk. The main purpose is to remove the module flags for 0.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D130145/new/
https://reviews.llvm.org/D130145
More information about the cfe-commits
mailing list