[PATCH] D99078: [LLD] Implement /guard:[no]ehcont
Alvin Wong via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Aug 27 00:48:19 PDT 2022
alvinhochun added inline comments.
Herald added a subscriber: ormris.
Herald added a project: All.
================
Comment at: lld/COFF/DriverUtils.cpp:104-111
else if (arg.equals_lower("nolongjmp"))
- config->guardCF = GuardCFLevel::NoLongJmp;
- else if (arg.equals_lower("cf") || arg.equals_lower("longjmp"))
- config->guardCF = GuardCFLevel::Full;
+ config->guardCF &= ~GuardCFLevel::LongJmp;
+ else if (arg.equals_lower("noehcont"))
+ config->guardCF &= ~GuardCFLevel::EHCont;
+ else if (arg.equals_lower("cf"))
+ config->guardCF = GuardCFLevel::CF;
+ else if (arg.equals_lower("longjmp"))
----------------
This changed the behaviour of `/guard:cf`. Before this change, `/guard:cf` is equivalent to `/guard:cf,longjmp` by default, but after this change one must explicitly pass `/guard:longjmp` to`lld-link for it to generate the guard long jump table.
This also does not match the behaviour of MSVC's link.exe. From my quick testing, `/guard:cf`, `/guard:longjmp` and `/guard:cf,longjmp` all do the same thing for it to enable both CFGuard and the long jump table. Only when you pass `/guard:cf,nolongjmp` is the jump table not present in the final image.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D99078/new/
https://reviews.llvm.org/D99078
More information about the llvm-commits
mailing list