Skip to content

Commit 1db7404

Browse files
Merge pull request MicrosoftDocs#4210 from corob-msft/docs/corob/4207-non-blocking
Address non-blocking issues from 4207
2 parents 14417cd + f9f9ed8 commit 1db7404

File tree

3 files changed

+27
-28
lines changed

3 files changed

+27
-28
lines changed

docs/build/arm64-exception-handling.md

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,39 +11,39 @@ Windows on ARM64 uses the same structured exception handling mechanism for async
1111

1212
The exception unwinding data conventions, and this description, are intended to:
1313

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.
1515

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).
1717

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.
1919

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.
2121

22-
1. Support unwinding in mid-prolog and mid-epilog.
22+
- Support unwinding in mid-prolog and mid-epilog.
2323

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.
2525

26-
1. Take up a minimal amount of space.
26+
- Take up a minimal amount of space.
2727

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.
2929

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.
3131

3232
## Assumptions
3333

3434
These assumptions are made in the exception handling description:
3535

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.
3737

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.
3939

40-
1. There's no conditional code in epilogs.
40+
- There's no conditional code in epilogs.
4141

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.
4343

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.
4545

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.
4747

4848
## ARM64 stack frame layout
4949

@@ -275,11 +275,11 @@ The array of unwind codes is a pool of sequences that describe exactly how to un
275275

276276
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:
277277

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.
279279

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.
281281

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.
283283

284284
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.
285285

@@ -365,7 +365,7 @@ Step 4: Save input arguments in the home parameter area.
365365

366366
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.
367367

368-
| Step # | Flag values | # of instructions | Opcode | Unwind Code |
368+
| Step # | Flag values | # of instructions | Opcode | Unwind code |
369369
|--|--|--|--|--|
370370
| 0 | | | `#intsz = RegI * 8;`<br/>`if (CR==01) #intsz += 8; // lr`<br/>`#fpsz = RegF * 8;`<br/>`if(RegF) #fpsz += 8;`<br/>`#savsz=((#intsz+#fpsz+8*8*H)+0xf)&~0xf)`<br/>`#locsz = #famsz - #savsz` |
371371
| 1 | 0 < **RegI** <= 10 | **RegI** / 2 +<br/> **RegI** % 2 | `stp x19,x20,[sp,#savsz]!`<br/>`stp x21,x22,[sp,#16]`<br/>`...` | `save_regp_x`<br/>`save_regp`<br/>`...` |
@@ -624,5 +624,5 @@ Epilog Start Index [4] points to the middle of Prolog unwind code (partially reu
624624

625625
## See also
626626

627-
[Overview of ARM64 ABI conventions](arm64-windows-abi-conventions.md)<br/>
628-
[ARM Exception Handling](arm-exception-handling.md)
627+
[Overview of ARM64 ABI conventions](arm64-windows-abi-conventions.md)\
628+
[ARM exception handling](arm-exception-handling.md)

docs/c-language/c-operators.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
---
2-
description: "Learn more about: C Operators"
3-
title: "C Operators"
4-
ms.date: "06/14/2018"
2+
description: "Learn more about: C operators"
3+
title: "C operators"
4+
ms.date: 04/07/2022
55
helpviewer_keywords: ["ternary operators", "operators [C]", "symbols, operators", "binary operators", "associativity of operators", "binary data, binary expressions"]
66
ms.assetid: 13bc4c8e-2dc9-4b23-9f3a-25064e8777ed
77
---
8-
# C Operators
8+
# C operators
99

1010
The C operators are a subset of the [C++ built-in operators](../cpp/cpp-built-in-operators-precedence-and-associativity.md).
1111

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.
1313

1414
C includes the following unary operators:
1515

docs/windows/latest-supported-vc-redist.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ helpviewer_keywords:
1313
]
1414
---
1515

16-
# Microsoft Visual C++ Redistributable Latest Supported Downloads
16+
# Microsoft Visual C++ Redistributable latest supported downloads
1717

1818
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.
1919

@@ -97,5 +97,4 @@ Download Redistributable files for other languages and architectures from:
9797
> [!NOTE]
9898
> Visual Studio 2005 [reached end of extended support on April 12, 2016](/lifecycle/products/microsoft-visual-studio-2005)
9999
100-
101100
- 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

Comments
 (0)