Skip to content

Commit b077d2f

Browse files
committed
[CHERRY-PICK] MdePkg/BaseMemoryLib: Prevent potential VS2022 linker failure
After updating between various VS2022 versions such as 17.4 to 17.5, , linker failures began to appear in several modules because `memset` is an unresolved symbol. The following functions in BaseMemoryLib/MemLibGeneric.c have their loop pattern replaced with the `memset` intrinsic function: - `InternalMemSetMem16()` - `InternalMemSetMem32()` - `InternalMemSetMem64()` An example of an error related to `InternalMemSetMem64()` in VariableSmmRuntimeDxe is shown below: ``` INFO - BaseMemoryLib.lib(MemLibGeneric.obj) : error LNK2001: unresolved external symbol memset INFO - <...>\VariableSmmRuntimeDxe.dll : fatal error LNK1120: 1 unresolved externals ``` This was reproduced in several environments including: - Public VM image: https://github.com/actions/runner-images/blob/win22/20230226.1/images/win/Windows2022-Readme.md - Locally when updating from 17.4.4 to 17.5.1 > Note: This image (with 17.4) does not have this issue https://github.com/actions/runner-images/blob/win22/20230219.1/images/win/Windows2022-Readme.md This change updates the type cast for the destination buffer to be a pointer to `volatile` data to prevent this optimization with a relatively minimum delta to prior implementation. Signed-off-by: Michael Kubacki <[email protected]> (cherry picked from commit c46bc0e)
1 parent 59f4100 commit b077d2f

File tree

1 file changed

+0
-6
lines changed

1 file changed

+0
-6
lines changed

MdePkg/Library/BaseMemoryLib/MemLibGeneric.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@ InternalMemSetMem16 (
3232
)
3333
{
3434
for ( ; Length != 0; Length--) {
35-
// MU_CHANGE use a pointer to volatile data to prevent Visual Studio 17.5 (VS2022)
36-
// from replacing the assignment with a `memset()` intrinsic
3735
((volatile UINT16 *)Buffer)[Length - 1] = Value;
3836
}
3937

@@ -59,8 +57,6 @@ InternalMemSetMem32 (
5957
)
6058
{
6159
for ( ; Length != 0; Length--) {
62-
// MU_CHANGE use a pointer to volatile data to prevent Visual Studio 17.5 (VS2022)
63-
// from replacing the assignment with a `memset()` intrinsic
6460
((volatile UINT32 *)Buffer)[Length - 1] = Value;
6561
}
6662

@@ -86,8 +82,6 @@ InternalMemSetMem64 (
8682
)
8783
{
8884
for ( ; Length != 0; Length--) {
89-
// MU_CHANGE use a pointer to volatile data to prevent Visual Studio 17.5 (VS2022)
90-
// from replacing the assignment with a `memset()` intrinsic
9185
((volatile UINT64 *)Buffer)[Length - 1] = Value;
9286
}
9387

0 commit comments

Comments
 (0)