Go to the source code of this file.
|
| | STATISTIC (FunctionsProcessed, "Number of functions processed by Unwind v3 pass") |
| | STATISTIC (SubFragmentSplits, "Number of sub-fragment splits inserted for Unwind v3") |
| static void | suppressWinCFI (MachineFunction &MF) |
| | After reporting a recoverable error for MF, erase all SEH pseudo- instructions and clear the WinCFI flag so the AsmPrinter doesn't try to emit (potentially malformed) unwind information.
|
| | INITIALIZE_PASS (X86WinEHUnwindV3, "x86-wineh-unwindv3", "Capacity check and sub-fragment splitting for Win64 Unwind v3", false, false) FunctionPass *llvm |
◆ DEBUG_TYPE
| #define DEBUG_TYPE "x86-wineh-unwindv3" |
◆ INITIALIZE_PASS()
| INITIALIZE_PASS |
( |
X86WinEHUnwindV3 | , |
|
|
"x86-wineh-unwindv3" | , |
|
|
"Capacity check and sub-fragment splitting for Win64 Unwind v3" | , |
|
|
false | , |
|
|
false | ) |
◆ STATISTIC() [1/2]
| STATISTIC |
( |
FunctionsProcessed | , |
|
|
"Number of functions processed by Unwind v3 pass" | ) |
◆ STATISTIC() [2/2]
| STATISTIC |
( |
SubFragmentSplits | , |
|
|
"Number of sub-fragment splits inserted for Unwind v3" | ) |
◆ suppressWinCFI()
◆ ApproxBytesPerInstr
| cl::opt< unsigned > ApproxBytesPerInstr("x86-wineh-unwindv3-instr-avg-size", cl::Hidden, cl::desc( "Average size of an instruction. This value is used in determining " "split points for chained unwinder info"), cl::init(7)) |
( |
"x86-wineh-unwindv3-instr-avg-size" | , |
|
|
cl::Hidden | , |
|
|
cl::desc( "Average size of an instruction. This value is used in determining " "split points for chained unwinder info") | , |
|
|
cl::init(7) | ) |
|
static |
Approximate byte distance between an epilog and its fragment tail beyond which the funclet is split into a new chained sub-fragment.
The V3 EpilogOffset field is a signed 16-bit byte offset measured from the fragment tail, so each fragment must span less than 32 KiB of code. The exact byte offsets aren't known until MC layout, so (like the V2 pass) an approximate byte count is used as a proxy — instructions are charged ApproxBytesPerInstr each and alignment padding is added.
◆ EpilogDistanceThreshold
| unsigned EpilogDistanceThreshold = 32767 |
|
staticconstexpr |
◆ MaxV3EpilogOps
◆ MaxV3Epilogs
◆ MaxV3PrologOps