You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/build/arm64-exception-handling.md
+21-21Lines changed: 21 additions & 21 deletions
Original file line number
Diff line number
Diff line change
@@ -11,39 +11,39 @@ Windows on ARM64 uses the same structured exception handling mechanism for async
11
11
12
12
The exception unwinding data conventions, and this description, are intended to:
13
13
14
-
1. Provide enough description to allow unwinding without code probing in all cases.
14
+
- Provide enough description to allow unwinding without code probing in all cases.
15
15
16
-
- Analyzing the code requires the code to be paged in. It prevents unwinding in some circumstances where it's useful (tracing, sampling, debugging).
16
+
- Analyzing the code requires the code to be paged in. It prevents unwinding in some circumstances where it's useful (tracing, sampling, debugging).
17
17
18
-
- Analyzing the code is complex; the compiler must be careful to only generate instructions that the unwinder can decode.
18
+
- Analyzing the code is complex; the compiler must be careful to only generate instructions that the unwinder can decode.
19
19
20
-
- If unwinding can't be fully described by using unwind codes, then in some cases it must fall back to instruction decoding. Instruction decoding increases the overall complexity, and ideally should be avoided.
20
+
- If unwinding can't be fully described by using unwind codes, then in some cases it must fall back to instruction decoding. Instruction decoding increases the overall complexity, and ideally should be avoided.
21
21
22
-
1. Support unwinding in mid-prolog and mid-epilog.
22
+
- Support unwinding in mid-prolog and mid-epilog.
23
23
24
-
- Unwinding is used in Windows for more than exception handling. It's critical that code can unwind accurately even when in the middle of a prolog or epilog code sequence.
24
+
- Unwinding is used in Windows for more than exception handling. It's critical that code can unwind accurately even when in the middle of a prolog or epilog code sequence.
25
25
26
-
1. Take up a minimal amount of space.
26
+
- Take up a minimal amount of space.
27
27
28
-
- The unwind codes must not aggregate to significantly increase the binary size.
28
+
- The unwind codes must not aggregate to significantly increase the binary size.
29
29
30
-
- Since the unwind codes are likely to be locked in memory, a small footprint ensures a minimal overhead for each loaded binary.
30
+
- Since the unwind codes are likely to be locked in memory, a small footprint ensures a minimal overhead for each loaded binary.
31
31
32
32
## Assumptions
33
33
34
34
These assumptions are made in the exception handling description:
35
35
36
-
1. Prologs and epilogs tend to mirror each other. By taking advantage of this common trait, the size of the metadata needed to describe unwinding can be greatly reduced. Within the body of the function, it doesn't matter whether the prolog's operations are undone, or the epilog's operations are done in a forward manner. Both should produce identical results.
36
+
- Prologs and epilogs tend to mirror each other. By taking advantage of this common trait, the size of the metadata needed to describe unwinding can be greatly reduced. Within the body of the function, it doesn't matter whether the prolog's operations are undone, or the epilog's operations are done in a forward manner. Both should produce identical results.
37
37
38
-
1. Functions tend on the whole to be relatively small. Several optimizations for space rely on this fact to achieve the most efficient packing of data.
38
+
- Functions tend on the whole to be relatively small. Several optimizations for space rely on this fact to achieve the most efficient packing of data.
39
39
40
-
1. There's no conditional code in epilogs.
40
+
- There's no conditional code in epilogs.
41
41
42
-
1. Dedicated frame pointer register: If the sp is saved in another register (x29) in the prolog, that register remains untouched throughout the function. It means the original sp may be recovered at any time.
42
+
- Dedicated frame pointer register: If the sp is saved in another register (x29) in the prolog, that register remains untouched throughout the function. It means the original sp may be recovered at any time.
43
43
44
-
1. Unless the sp is saved in another register, all manipulation of the stack pointer occurs strictly within the prolog and epilog.
44
+
- Unless the sp is saved in another register, all manipulation of the stack pointer occurs strictly within the prolog and epilog.
45
45
46
-
1. The stack frame layout is organized as described in the next section.
46
+
- The stack frame layout is organized as described in the next section.
47
47
48
48
## ARM64 stack frame layout
49
49
@@ -275,11 +275,11 @@ The array of unwind codes is a pool of sequences that describe exactly how to un
275
275
276
276
If exceptions were guaranteed to only ever occur within a function body, and never within a prolog or any epilog, then only a single sequence would be necessary. However, the Windows unwinding model requires that code can unwind from within a partially executed prolog or epilog. To meet this requirement, the unwind codes have been carefully designed so they unambiguously map 1:1 to each relevant opcode in the prolog and epilog. This design has several implications:
277
277
278
-
1. By counting the number of unwind codes, it's possible to compute the length of the prolog and epilog.
278
+
- By counting the number of unwind codes, it's possible to compute the length of the prolog and epilog.
279
279
280
-
1. By counting the number of instructions past the start of an epilog scope, it's possible to skip the equivalent number of unwind codes. We can execute the rest of a sequence to complete the partially executed unwind done by the epilog.
280
+
- By counting the number of instructions past the start of an epilog scope, it's possible to skip the equivalent number of unwind codes. We can execute the rest of a sequence to complete the partially executed unwind done by the epilog.
281
281
282
-
1. By counting the number of instructions before the end of the prolog, it's possible to skip the equivalent number of unwind codes. We can execute the rest of the sequence to undo only those parts of the prolog that have completed execution.
282
+
- By counting the number of instructions before the end of the prolog, it's possible to skip the equivalent number of unwind codes. We can execute the rest of the sequence to undo only those parts of the prolog that have completed execution.
283
283
284
284
The unwind codes are encoded according to the table below. All unwind codes are a single/double byte, except the one that allocates a huge stack. There are 21 unwind codes in total. Each unwind code maps exactly one instruction in the prolog/epilog, to allow for unwinding of partially executed prologs and epilogs.
285
285
@@ -365,7 +365,7 @@ Step 4: Save input arguments in the home parameter area.
365
365
366
366
Step 5: Allocate remaining stack, including local area, \<x29,lr> pair, and outgoing parameter area. 5a corresponds to canonical type 1. 5b and 5c are for canonical type 2. 5d and 5e are for both type 3 and type 4.
367
367
368
-
| Step # | Flag values | # of instructions | Opcode | Unwind Code|
368
+
| Step # | Flag values | # of instructions | Opcode | Unwind code|
The C operators are a subset of the [C++ built-in operators](../cpp/cpp-built-in-operators-precedence-and-associativity.md).
11
11
12
-
There are three types of operators. A unary expression consists of either a unary operator followed by an operand, or the **`sizeof`** keyword followed by an expression. The expression can be either the name of a variable or a cast expression. If the expression is a cast expression, it must be enclosed in parentheses. A binary expression consists of two operands joined by a binary operator. A ternary expression consists of three operands joined by the conditional-expression operator.
12
+
There are three types of operators. A unary expression consists of either a unary operator followed by an operand, or the **`sizeof`**or **`_Alignof`**keyword followed by an expression. The expression can be either the name of a variable or a cast expression. If the expression is a cast expression, it must be enclosed in parentheses. A binary expression consists of two operands joined by a binary operator. A ternary expression consists of three operands joined by the conditional-expression operator.
Copy file name to clipboardExpand all lines: docs/windows/latest-supported-vc-redist.md
+1-2Lines changed: 1 addition & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -13,7 +13,7 @@ helpviewer_keywords:
13
13
]
14
14
---
15
15
16
-
# Microsoft Visual C++ Redistributable Latest Supported Downloads
16
+
# Microsoft Visual C++ Redistributable latest supported downloads
17
17
18
18
The Visual C++ Redistributable installs Microsoft C and C++ (MSVC) runtime libraries. These libraries are required by many applications built by using Microsoft C and C++ tools. If your app uses those libraries, a Microsoft Visual C++ Redistributable package must be installed on the target system before you install your app. The Redistributable package architecture must match your app's target architecture. The Redistributable version must be at least as recent as the MSVC build toolset used to build your app. We recommend you use the latest Redistributable available for your version of Visual Studio, with some exceptions noted below.
19
19
@@ -97,5 +97,4 @@ Download Redistributable files for other languages and architectures from:
97
97
> [!NOTE]
98
98
> Visual Studio 2005 [reached end of extended support on April 12, 2016](/lifecycle/products/microsoft-visual-studio-2005)
99
99
100
-
101
100
- Redistributable files for X86, X64, and IA64 architectures are available from [Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC Security Update](https://www.microsoft.com/download/details.aspx?id=26347).
0 commit comments