From d6708b81e87329b1dd07cf90fbb6706b8491e0ac Mon Sep 17 00:00:00 2001
From: andrew fish <afish@apple.com>
Date: Thu, 6 Nov 2014 10:51:56 -0800
Subject: [PATCH 1/6] MdePkg: BaseLib:Add missing
 ASM_FUNCTION_REMOVE_IF_UNREFERENCED to .S files

ASM_FUNCTION_REMOVE_IF_UNREFERENCED is required for Xcode -Os dead stripping.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Andrew Fish <afish@apple.com>
---
 MdePkg/Library/BaseLib/Ia32/ARShiftU64.S           |  2 ++
 MdePkg/Library/BaseLib/Ia32/CpuId.S                |  2 ++
 MdePkg/Library/BaseLib/Ia32/CpuIdEx.S              |  2 ++
 MdePkg/Library/BaseLib/Ia32/DisableCache.S         |  2 ++
 MdePkg/Library/BaseLib/Ia32/DisablePaging32.S      |  2 ++
 MdePkg/Library/BaseLib/Ia32/DivU64x32.S            |  2 ++
 MdePkg/Library/BaseLib/Ia32/DivU64x32Remainder.S   |  2 ++
 MdePkg/Library/BaseLib/Ia32/DivU64x64Remainder.S   | 26 ++++++++++++----------
 MdePkg/Library/BaseLib/Ia32/EnableCache.S          |  2 ++
 .../Library/BaseLib/Ia32/EnableDisableInterrupts.S |  2 ++
 MdePkg/Library/BaseLib/Ia32/EnableInterrupts.S     |  2 ++
 MdePkg/Library/BaseLib/Ia32/EnablePaging32.S       |  2 ++
 MdePkg/Library/BaseLib/Ia32/EnablePaging64.S       |  2 ++
 MdePkg/Library/BaseLib/Ia32/InternalSwitchStack.S  |  1 +
 MdePkg/Library/BaseLib/Ia32/LRotU64.S              |  2 ++
 MdePkg/Library/BaseLib/Ia32/LShiftU64.S            |  2 ++
 MdePkg/Library/BaseLib/Ia32/LongJump.S             |  2 ++
 MdePkg/Library/BaseLib/Ia32/ModU64x32.S            |  2 ++
 MdePkg/Library/BaseLib/Ia32/Monitor.S              |  2 ++
 MdePkg/Library/BaseLib/Ia32/MultU64x32.S           |  2 ++
 MdePkg/Library/BaseLib/Ia32/MultU64x64.S           |  2 ++
 MdePkg/Library/BaseLib/Ia32/Mwait.S                |  2 ++
 MdePkg/Library/BaseLib/Ia32/RRotU64.S              |  2 ++
 MdePkg/Library/BaseLib/Ia32/RShiftU64.S            |  2 ++
 MdePkg/Library/BaseLib/Ia32/ReadSs.S               |  2 ++
 MdePkg/Library/BaseLib/Ia32/ReadTr.S               |  2 ++
 MdePkg/Library/BaseLib/Ia32/SetJump.S              |  2 ++
 MdePkg/Library/BaseLib/Ia32/SwapBytes64.S          |  2 ++
 MdePkg/Library/BaseLib/Ia32/Thunk16.S              |  2 ++
 MdePkg/Library/BaseLib/Ia32/WriteMsr64.S           |  2 ++
 MdePkg/Library/BaseLib/X64/CpuBreakpoint.S         |  2 ++
 MdePkg/Library/BaseLib/X64/CpuId.S                 |  2 ++
 MdePkg/Library/BaseLib/X64/CpuIdEx.S               |  2 ++
 MdePkg/Library/BaseLib/X64/DisableCache.S          |  2 ++
 MdePkg/Library/BaseLib/X64/DisablePaging64.S       |  2 ++
 MdePkg/Library/BaseLib/X64/EnableCache.S           |  2 ++
 .../Library/BaseLib/X64/EnableDisableInterrupts.S  |  2 ++
 MdePkg/Library/BaseLib/X64/LongJump.S              |  2 ++
 MdePkg/Library/BaseLib/X64/SwitchStack.S           |  6 +++--
 MdePkg/Library/BaseLib/X64/Thunk16.S               |  2 ++
 MdePkg/Library/BaseLib/X64/Wbinvd.S                |  2 ++
 41 files changed, 95 insertions(+), 14 deletions(-)

diff --git a/MdePkg/Library/BaseLib/Ia32/ARShiftU64.S b/MdePkg/Library/BaseLib/Ia32/ARShiftU64.S
index 8f73ed4..67c17c4 100644
--- a/MdePkg/Library/BaseLib/Ia32/ARShiftU64.S
+++ b/MdePkg/Library/BaseLib/Ia32/ARShiftU64.S
@@ -39,3 +39,5 @@ ASM_PFX(InternalMathARShiftU64):
     shrdl   %cl, %edx, %eax
     sar     %cl, %edx
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/CpuId.S b/MdePkg/Library/BaseLib/Ia32/CpuId.S
index b3b71a3..7720d18 100644
--- a/MdePkg/Library/BaseLib/Ia32/CpuId.S
+++ b/MdePkg/Library/BaseLib/Ia32/CpuId.S
@@ -61,3 +61,5 @@ L4:
     leave
     pop     %ebx
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/CpuIdEx.S b/MdePkg/Library/BaseLib/Ia32/CpuIdEx.S
index 0d34c56..a32e958 100644
--- a/MdePkg/Library/BaseLib/Ia32/CpuIdEx.S
+++ b/MdePkg/Library/BaseLib/Ia32/CpuIdEx.S
@@ -65,3 +65,5 @@ L4:
     leave
     pop     %ebx
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/DisableCache.S b/MdePkg/Library/BaseLib/Ia32/DisableCache.S
index 5f86da4..984b38c 100644
--- a/MdePkg/Library/BaseLib/Ia32/DisableCache.S
+++ b/MdePkg/Library/BaseLib/Ia32/DisableCache.S
@@ -37,3 +37,5 @@ ASM_PFX(AsmDisableCache):
     movl    %eax, %cr0
     wbinvd
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/DisablePaging32.S b/MdePkg/Library/BaseLib/Ia32/DisablePaging32.S
index c6daf6a..857047a 100644
--- a/MdePkg/Library/BaseLib/Ia32/DisablePaging32.S
+++ b/MdePkg/Library/BaseLib/Ia32/DisablePaging32.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalX86DisablePaging32):
     push    %ecx
     call    *%ebx
     jmp     .                           # EntryPoint() should not return
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/DivU64x32.S b/MdePkg/Library/BaseLib/Ia32/DivU64x32.S
index 5d3f452..eaae46d 100644
--- a/MdePkg/Library/BaseLib/Ia32/DivU64x32.S
+++ b/MdePkg/Library/BaseLib/Ia32/DivU64x32.S
@@ -39,3 +39,5 @@ ASM_PFX(InternalMathDivU64x32):
     divl    %ecx
     pop     %edx                    # restore high-order dword of the quotient
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/DivU64x32Remainder.S b/MdePkg/Library/BaseLib/Ia32/DivU64x32Remainder.S
index d9eb8e9..836dc3c 100644
--- a/MdePkg/Library/BaseLib/Ia32/DivU64x32Remainder.S
+++ b/MdePkg/Library/BaseLib/Ia32/DivU64x32Remainder.S
@@ -44,3 +44,5 @@ ASM_PFX(InternalMathDivRemU64x32):
 L1:
     pop     %edx                    # edx <- quotient[32..63]
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/DivU64x64Remainder.S b/MdePkg/Library/BaseLib/Ia32/DivU64x64Remainder.S
index f4df094..6572107 100644
--- a/MdePkg/Library/BaseLib/Ia32/DivU64x64Remainder.S
+++ b/MdePkg/Library/BaseLib/Ia32/DivU64x64Remainder.S
@@ -34,14 +34,14 @@ ASM_GLOBAL ASM_PFX(InternalMathDivRemU64x32), ASM_PFX(InternalMathDivRemU64x64)
 ASM_PFX(InternalMathDivRemU64x64):
     movl    16(%esp), %ecx              # ecx <- divisor[32..63]
     testl   %ecx, %ecx
-    jnz     Hard                        # call _@DivRemU64x64 if Divisor > 2^32
+    jnz     L_Hard                        # call _@DivRemU64x64 if Divisor > 2^32
     movl    20(%esp), %ecx
     jecxz   L1
-    andl     $0, 4(%ecx)                # zero high dword of remainder
+    and     $0, 4(%ecx)                 # zero high dword of remainder
     movl    %ecx, 16(%esp)              # set up stack frame to match DivRemU64x32
 L1:
     jmp     ASM_PFX(InternalMathDivRemU64x32)
-Hard:
+L_Hard:
     push    %ebx
     push    %esi
     push    %edi
@@ -63,27 +63,29 @@ L2:
     imull   %ebx, %ecx                  # ecx <- quotient * divisor[32..63]   
     addl    %ecx, %edx                  # edx <- (quotient * divisor)[32..63] 
     mov     32(%esp), %ecx              # ecx <- addr for Remainder           
-    jc      TooLarge                    # product > 2^64                      
+    jc      L_TooLarge                    # product > 2^64                      
     cmpl    %edx, %edi                  # compare high 32 bits                
-    ja      Correct                                                           
-    jb      TooLarge                    # product > dividend                  
+    ja      L_Correct                                                           
+    jb      L_TooLarge                    # product > dividend                  
     cmpl    %eax, %esi                                                        
-    jae     Correct                     # product <= dividend                 
-TooLarge:
+    jae     L_Correct                     # product <= dividend                 
+L_TooLarge:
     decl    %ebx                        # adjust quotient by -1              
-    jecxz   Return                      # return if Remainder == NULL        
+    jecxz   L_Return                      # return if Remainder == NULL        
     sub     24(%esp), %eax                                                   
     sbb     28(%esp), %edx              # edx:eax <- (quotient - 1) * divisor
-Correct:
-    jecxz   Return
+L_Correct:
+    jecxz   L_Return
     subl    %eax, %esi
     sbbl    %edx, %edi                  # edi:esi <- remainder
     movl    %esi, (%ecx)
     movl    %edi, 4(%ecx)
-Return:
+L_Return:
     movl    %ebx, %eax                  # eax <- quotient         
     xorl    %edx, %edx                  # quotient is 32 bits long
     pop     %edi
     pop     %esi
     pop     %ebx
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/EnableCache.S b/MdePkg/Library/BaseLib/Ia32/EnableCache.S
index bc3aa2f..c11e807 100644
--- a/MdePkg/Library/BaseLib/Ia32/EnableCache.S
+++ b/MdePkg/Library/BaseLib/Ia32/EnableCache.S
@@ -37,3 +37,5 @@ ASM_PFX(AsmEnableCache):
     btrl    $29, %eax
     movl    %eax, %cr0
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/EnableDisableInterrupts.S b/MdePkg/Library/BaseLib/Ia32/EnableDisableInterrupts.S
index bc89c25..7acd6b1 100644
--- a/MdePkg/Library/BaseLib/Ia32/EnableDisableInterrupts.S
+++ b/MdePkg/Library/BaseLib/Ia32/EnableDisableInterrupts.S
@@ -34,3 +34,5 @@ ASM_PFX(EnableDisableInterrupts):
     sti
     cli
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/EnableInterrupts.S b/MdePkg/Library/BaseLib/Ia32/EnableInterrupts.S
index 3caf7ec..cde2adb 100644
--- a/MdePkg/Library/BaseLib/Ia32/EnableInterrupts.S
+++ b/MdePkg/Library/BaseLib/Ia32/EnableInterrupts.S
@@ -33,3 +33,5 @@ ASM_GLOBAL ASM_PFX(EnableInterrupts)
 ASM_PFX(EnableInterrupts):
     sti
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/EnablePaging32.S b/MdePkg/Library/BaseLib/Ia32/EnablePaging32.S
index 1a168c9..40581d5 100644
--- a/MdePkg/Library/BaseLib/Ia32/EnablePaging32.S
+++ b/MdePkg/Library/BaseLib/Ia32/EnablePaging32.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalX86EnablePaging32):
     push    %ecx
     call    *%ebx
     jmp     .
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/EnablePaging64.S b/MdePkg/Library/BaseLib/Ia32/EnablePaging64.S
index 08950ce..e22a2ef 100644
--- a/MdePkg/Library/BaseLib/Ia32/EnablePaging64.S
+++ b/MdePkg/Library/BaseLib/Ia32/EnablePaging64.S
@@ -61,3 +61,5 @@ LongStart:                              # long mode starts here
     addl    $-0x20, %esp                # add rsp, -20h
     call    *%ebx                       # call rbx
     jmp     .                           # no one should get here
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/InternalSwitchStack.S b/MdePkg/Library/BaseLib/Ia32/InternalSwitchStack.S
index dc0cbd4..113f265 100644
--- a/MdePkg/Library/BaseLib/Ia32/InternalSwitchStack.S
+++ b/MdePkg/Library/BaseLib/Ia32/InternalSwitchStack.S
@@ -46,3 +46,4 @@ ASM_PFX(InternalSwitchStack):
 	pushl $0                  # keeps gdb from unwinding stack
 	jmp   *8(%ebp)            # call and never return 
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/LRotU64.S b/MdePkg/Library/BaseLib/Ia32/LRotU64.S
index e9aeeb6..32c34bf 100644
--- a/MdePkg/Library/BaseLib/Ia32/LRotU64.S
+++ b/MdePkg/Library/BaseLib/Ia32/LRotU64.S
@@ -44,3 +44,5 @@ ASM_PFX(InternalMathLRotU64):
     cmovnz  %ecx, %edx
     pop     %ebx
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/LShiftU64.S b/MdePkg/Library/BaseLib/Ia32/LShiftU64.S
index 31df0d6..44b1f9d 100644
--- a/MdePkg/Library/BaseLib/Ia32/LShiftU64.S
+++ b/MdePkg/Library/BaseLib/Ia32/LShiftU64.S
@@ -39,3 +39,5 @@ ASM_PFX(InternalMathLShiftU64):
     shld    %cl, %eax, %edx
     shl     %cl, %eax
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/LongJump.S b/MdePkg/Library/BaseLib/Ia32/LongJump.S
index 4514cd3..e8eff86 100644
--- a/MdePkg/Library/BaseLib/Ia32/LongJump.S
+++ b/MdePkg/Library/BaseLib/Ia32/LongJump.S
@@ -39,3 +39,5 @@ ASM_PFX(InternalLongJump):
     movl    12(%edx), %ebp
     movl    16(%edx), %esp
     jmp     *20(%edx)                   # restore "eip"
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/ModU64x32.S b/MdePkg/Library/BaseLib/Ia32/ModU64x32.S
index beb2217..1c99a90 100644
--- a/MdePkg/Library/BaseLib/Ia32/ModU64x32.S
+++ b/MdePkg/Library/BaseLib/Ia32/ModU64x32.S
@@ -38,3 +38,5 @@ ASM_PFX(InternalMathModU64x32):
     divl    %ecx
     movl    %edx, %eax
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/Monitor.S b/MdePkg/Library/BaseLib/Ia32/Monitor.S
index 1e5f40e..cfcec51 100644
--- a/MdePkg/Library/BaseLib/Ia32/Monitor.S
+++ b/MdePkg/Library/BaseLib/Ia32/Monitor.S
@@ -38,3 +38,5 @@ ASM_PFX(AsmMonitor):
     movl    12(%esp), %edx
     monitor %eax, %ecx, %edx            # monitor
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/MultU64x32.S b/MdePkg/Library/BaseLib/Ia32/MultU64x32.S
index 8e3f6f5..a934720 100644
--- a/MdePkg/Library/BaseLib/Ia32/MultU64x32.S
+++ b/MdePkg/Library/BaseLib/Ia32/MultU64x32.S
@@ -39,3 +39,5 @@ ASM_PFX(InternalMathMultU64x32):
     mull    0x4(%esp)
     addl    %ecx, %edx
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/MultU64x64.S b/MdePkg/Library/BaseLib/Ia32/MultU64x64.S
index 48f4ae0..1bb44d4 100644
--- a/MdePkg/Library/BaseLib/Ia32/MultU64x64.S
+++ b/MdePkg/Library/BaseLib/Ia32/MultU64x64.S
@@ -42,3 +42,5 @@ ASM_PFX(InternalMathMultU64x64):
     addl    %ebx, %edx                # carries are abandoned           
     pop     %ebx
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/Mwait.S b/MdePkg/Library/BaseLib/Ia32/Mwait.S
index 22b3ffd..1982f4b 100644
--- a/MdePkg/Library/BaseLib/Ia32/Mwait.S
+++ b/MdePkg/Library/BaseLib/Ia32/Mwait.S
@@ -36,3 +36,5 @@ ASM_PFX(AsmMwait):
     movl    8(%esp), %ecx
     mwait
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/RRotU64.S b/MdePkg/Library/BaseLib/Ia32/RRotU64.S
index 54fc089..22eedcb 100644
--- a/MdePkg/Library/BaseLib/Ia32/RRotU64.S
+++ b/MdePkg/Library/BaseLib/Ia32/RRotU64.S
@@ -44,3 +44,5 @@ ASM_PFX(InternalMathRRotU64):
     cmovnz  %ecx, %edx
     pop     %ebx
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/RShiftU64.S b/MdePkg/Library/BaseLib/Ia32/RShiftU64.S
index 17cdedb..937cf9c 100644
--- a/MdePkg/Library/BaseLib/Ia32/RShiftU64.S
+++ b/MdePkg/Library/BaseLib/Ia32/RShiftU64.S
@@ -42,3 +42,5 @@ ASM_PFX(InternalMathRShiftU64):
     shrdl   %cl, %edx, %eax
     shr     %cl, %edx
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/ReadSs.S b/MdePkg/Library/BaseLib/Ia32/ReadSs.S
index c87fa61..b9dcbcc 100644
--- a/MdePkg/Library/BaseLib/Ia32/ReadSs.S
+++ b/MdePkg/Library/BaseLib/Ia32/ReadSs.S
@@ -33,3 +33,5 @@ ASM_GLOBAL ASM_PFX(AsmReadSs)
 ASM_PFX(AsmReadSs):
     movl    %ss, %eax
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/ReadTr.S b/MdePkg/Library/BaseLib/Ia32/ReadTr.S
index 20dd7b3..b3cb6e3 100644
--- a/MdePkg/Library/BaseLib/Ia32/ReadTr.S
+++ b/MdePkg/Library/BaseLib/Ia32/ReadTr.S
@@ -33,3 +33,5 @@ ASM_GLOBAL ASM_PFX(AsmReadTr)
 ASM_PFX(AsmReadTr):
     str     %ax
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/SetJump.S b/MdePkg/Library/BaseLib/Ia32/SetJump.S
index 459224e..88dcac6 100644
--- a/MdePkg/Library/BaseLib/Ia32/SetJump.S
+++ b/MdePkg/Library/BaseLib/Ia32/SetJump.S
@@ -42,3 +42,5 @@ ASM_PFX(SetJump):
     movl    %ecx, 20(%edx)                                  # eip value to restore in LongJump
     xorl    %eax, %eax
     jmp     *%ecx
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/SwapBytes64.S b/MdePkg/Library/BaseLib/Ia32/SwapBytes64.S
index ce4ebc8..d4c30fb 100644
--- a/MdePkg/Library/BaseLib/Ia32/SwapBytes64.S
+++ b/MdePkg/Library/BaseLib/Ia32/SwapBytes64.S
@@ -36,3 +36,5 @@ ASM_PFX(InternalMathSwapBytes64):
     bswapl  %eax
     bswapl  %edx
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/Thunk16.S b/MdePkg/Library/BaseLib/Ia32/Thunk16.S
index 185655e..b9403cb 100644
--- a/MdePkg/Library/BaseLib/Ia32/Thunk16.S
+++ b/MdePkg/Library/BaseLib/Ia32/Thunk16.S
@@ -220,3 +220,5 @@ ASM_PFX(mThunk16Attr):   .word      ASM_PFX(ThunkAttr)          - ASM_PFX(m16Sta
 ASM_PFX(m16Gdt):         .word      _NullSegDesc        - ASM_PFX(m16Start)
 ASM_PFX(m16GdtrBase):    .word      _16GdtrBase         - ASM_PFX(m16Start)
 ASM_PFX(mTransition):    .word      _EntryPoint         - ASM_PFX(m16Start)
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMsr64.S b/MdePkg/Library/BaseLib/Ia32/WriteMsr64.S
index 658de19..a5ee645 100644
--- a/MdePkg/Library/BaseLib/Ia32/WriteMsr64.S
+++ b/MdePkg/Library/BaseLib/Ia32/WriteMsr64.S
@@ -36,3 +36,5 @@ ASM_PFX(AsmWriteMsr64):
     movl    4(%esp), %ecx
     wrmsr
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/X64/CpuBreakpoint.S b/MdePkg/Library/BaseLib/X64/CpuBreakpoint.S
index 51cf9c0..0d47cd5 100644
--- a/MdePkg/Library/BaseLib/X64/CpuBreakpoint.S
+++ b/MdePkg/Library/BaseLib/X64/CpuBreakpoint.S
@@ -23,3 +23,5 @@ ASM_GLOBAL ASM_PFX(CpuBreakpoint)
 ASM_PFX(CpuBreakpoint):
   int $0x3
   ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/X64/CpuId.S b/MdePkg/Library/BaseLib/X64/CpuId.S
index c3d2597..f512f2e 100644
--- a/MdePkg/Library/BaseLib/X64/CpuId.S
+++ b/MdePkg/Library/BaseLib/X64/CpuId.S
@@ -58,3 +58,5 @@ L4:
     pop     %rax                         # restore Index to rax as return value
     pop     %rbx
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/X64/CpuIdEx.S b/MdePkg/Library/BaseLib/X64/CpuIdEx.S
index d47f53c..4f15af3 100644
--- a/MdePkg/Library/BaseLib/X64/CpuIdEx.S
+++ b/MdePkg/Library/BaseLib/X64/CpuIdEx.S
@@ -60,3 +60,5 @@ L4:
     pop     %rax                  # restore Index to rax as return value
     pop     %rbx
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/X64/DisableCache.S b/MdePkg/Library/BaseLib/X64/DisableCache.S
index 970f2f3..fa64d6b 100644
--- a/MdePkg/Library/BaseLib/X64/DisableCache.S
+++ b/MdePkg/Library/BaseLib/X64/DisableCache.S
@@ -37,3 +37,5 @@ ASM_PFX(AsmDisableCache):
     movq    %rax, %cr0
     wbinvd
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/X64/DisablePaging64.S b/MdePkg/Library/BaseLib/X64/DisablePaging64.S
index 676e9e1..e9c49bf 100644
--- a/MdePkg/Library/BaseLib/X64/DisablePaging64.S
+++ b/MdePkg/Library/BaseLib/X64/DisablePaging64.S
@@ -80,3 +80,5 @@ L1:
     jmp    .                              # no one should get here
 
 _mTransitionEnd :
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/X64/EnableCache.S b/MdePkg/Library/BaseLib/X64/EnableCache.S
index 9d73960..20b6539 100644
--- a/MdePkg/Library/BaseLib/X64/EnableCache.S
+++ b/MdePkg/Library/BaseLib/X64/EnableCache.S
@@ -37,3 +37,5 @@ ASM_PFX(AsmEnableCache):
     btrq    $29, %rax
     movq    %rax, %cr0
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/X64/EnableDisableInterrupts.S b/MdePkg/Library/BaseLib/X64/EnableDisableInterrupts.S
index f2ff61e..d36a3b9 100644
--- a/MdePkg/Library/BaseLib/X64/EnableDisableInterrupts.S
+++ b/MdePkg/Library/BaseLib/X64/EnableDisableInterrupts.S
@@ -34,3 +34,5 @@ ASM_PFX(EnableDisableInterrupts):
     sti
     cli
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/X64/LongJump.S b/MdePkg/Library/BaseLib/X64/LongJump.S
index f20446f..d2e4d15 100644
--- a/MdePkg/Library/BaseLib/X64/LongJump.S
+++ b/MdePkg/Library/BaseLib/X64/LongJump.S
@@ -52,3 +52,5 @@ ASM_PFX(InternalLongJump):
     movdqu  0xE8(%rcx), %xmm15  
     mov     %rdx, %rax          # set return value
     jmp     *0x48(%rcx)
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/X64/SwitchStack.S b/MdePkg/Library/BaseLib/X64/SwitchStack.S
index dc8d80e..d75cb4d 100644
--- a/MdePkg/Library/BaseLib/X64/SwitchStack.S
+++ b/MdePkg/Library/BaseLib/X64/SwitchStack.S
@@ -37,8 +37,8 @@
 #------------------------------------------------------------------------------
 ASM_GLOBAL ASM_PFX(InternalSwitchStack)
 ASM_PFX(InternalSwitchStack):
-	  pushq   %rbp            
-  	movq    %rsp, %rbp
+    pushq   %rbp            
+    movq    %rsp, %rbp
     
     mov     %rcx, %rax  // Shift registers for new call
     mov     %rdx, %rcx
@@ -50,3 +50,5 @@ ASM_PFX(InternalSwitchStack):
     lea     -0x20(%r9), %rsp
     pushq   $0        // stop gdb stack unwind
     jmp     *%rax     // call EntryPoint ()
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/X64/Thunk16.S b/MdePkg/Library/BaseLib/X64/Thunk16.S
index f592a28..506680f 100644
--- a/MdePkg/Library/BaseLib/X64/Thunk16.S
+++ b/MdePkg/Library/BaseLib/X64/Thunk16.S
@@ -332,3 +332,5 @@ L_RetFromRealMode:
     popq    %rbp
 
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseLib/X64/Wbinvd.S b/MdePkg/Library/BaseLib/X64/Wbinvd.S
index 52702d5..2e9f7f1 100644
--- a/MdePkg/Library/BaseLib/X64/Wbinvd.S
+++ b/MdePkg/Library/BaseLib/X64/Wbinvd.S
@@ -33,3 +33,5 @@ ASM_GLOBAL ASM_PFX(AsmWbinvd)
 ASM_PFX(AsmWbinvd):
     wbinvd
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
-- 
2.1.1 (Apple Git-51)


From e617a633504bacab96a55a8f6f7365deee11aae7 Mon Sep 17 00:00:00 2001
From: andrew fish <afish@apple.com>
Date: Thu, 6 Nov 2014 10:52:47 -0800
Subject: [PATCH 2/6] MdePkg: BaseMemoryLibMmx: Add missing
 ASM_FUNCTION_REMOVE_IF_UNREFERENCED to .S files

ASM_FUNCTION_REMOVE_IF_UNREFERENCED is required for Xcode -Os dead stripping.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Andrew Fish <afish@apple.com>
---
 MdePkg/Library/BaseMemoryLibMmx/Ia32/CompareMem.S | 2 ++
 MdePkg/Library/BaseMemoryLibMmx/Ia32/CopyMem.S    | 2 ++
 MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem16.S  | 2 ++
 MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem32.S  | 2 ++
 MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem64.S  | 2 ++
 MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem8.S   | 2 ++
 MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.S     | 2 ++
 MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem16.S   | 2 ++
 MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.S   | 2 ++
 MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.S   | 2 ++
 MdePkg/Library/BaseMemoryLibMmx/Ia32/ZeroMem.S    | 2 ++
 MdePkg/Library/BaseMemoryLibMmx/X64/CompareMem.S  | 1 +
 MdePkg/Library/BaseMemoryLibMmx/X64/CopyMem.S     | 2 ++
 MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem16.S   | 1 +
 MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem32.S   | 1 +
 MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem64.S   | 2 ++
 MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem8.S    | 1 +
 MdePkg/Library/BaseMemoryLibMmx/X64/SetMem.S      | 1 +
 MdePkg/Library/BaseMemoryLibMmx/X64/SetMem16.S    | 2 ++
 MdePkg/Library/BaseMemoryLibMmx/X64/SetMem32.S    | 1 +
 MdePkg/Library/BaseMemoryLibMmx/X64/SetMem64.S    | 1 +
 MdePkg/Library/BaseMemoryLibMmx/X64/ZeroMem.S     | 1 +
 22 files changed, 36 insertions(+)

diff --git a/MdePkg/Library/BaseMemoryLibMmx/Ia32/CompareMem.S b/MdePkg/Library/BaseMemoryLibMmx/Ia32/CompareMem.S
index b509586..b771212 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/Ia32/CompareMem.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/Ia32/CompareMem.S
@@ -53,3 +53,5 @@ ASM_PFX(InternalMemCompareMem):
     pop     %edi
     pop     %esi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/Ia32/CopyMem.S b/MdePkg/Library/BaseMemoryLibMmx/Ia32/CopyMem.S
index b934ff5..3a5ce65 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/Ia32/CopyMem.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/Ia32/CopyMem.S
@@ -84,3 +84,5 @@ L_CopyBytes:
     pop     %edi
     pop     %esi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem16.S b/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem16.S
index e247d4a..fe2c5df 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem16.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem16.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem16):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem32.S b/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem32.S
index 066fde4..4fd590e 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem32.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem32.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem32):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem64.S b/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem64.S
index b3435d7..d998ff4 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem64.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem64.S
@@ -59,3 +59,5 @@ L1:
     cmovne  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem8.S b/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem8.S
index 5e451fd..8e73e46 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem8.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem8.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem8):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.S b/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.S
index 7329d68..90d3983 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.S
@@ -64,3 +64,5 @@ L1:
     movl    8(%esp), %eax               # eax <- Buffer as return value
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem16.S b/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem16.S
index 4d84beb..9677579 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem16.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem16.S
@@ -57,3 +57,5 @@ L1:
     movl    8(%esp), %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.S b/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.S
index fb0d078..370986f 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.S
@@ -50,3 +50,5 @@ L1:
     movd    %mm0, (%edx)
 L2:
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.S b/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.S
index 53379ad..0951235 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.S
@@ -41,3 +41,5 @@ L0:
     lea     8(%edx), %edx
     loop    L0
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/Ia32/ZeroMem.S b/MdePkg/Library/BaseMemoryLibMmx/Ia32/ZeroMem.S
index d645271..413c4e8 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/Ia32/ZeroMem.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/Ia32/ZeroMem.S
@@ -52,3 +52,5 @@ L_ZeroBytes:
     movl    8(%esp), %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/X64/CompareMem.S b/MdePkg/Library/BaseMemoryLibMmx/X64/CompareMem.S
index 5902405..c9f9640 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/X64/CompareMem.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/X64/CompareMem.S
@@ -57,3 +57,4 @@ ASM_PFX(InternalMemCompareMem):
     popq    %rsi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/X64/CopyMem.S b/MdePkg/Library/BaseMemoryLibMmx/X64/CopyMem.S
index 1d87e2d..7b1d04b 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/X64/CopyMem.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/X64/CopyMem.S
@@ -72,3 +72,5 @@ L_CopyBytes:
     popq    %rdi
     popq    %rsi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem16.S b/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem16.S
index 8f18996..94566c0 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem16.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem16.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem16):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem32.S b/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem32.S
index 05b6f64..3db28dd 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem32.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem32.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem32):
     popq     %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem64.S b/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem64.S
index dd7c1b8..587bc95 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem64.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem64.S
@@ -53,3 +53,5 @@ ASM_PFX(InternalMemScanMem64):
     cmovnz   %rcx, %rax 
     popq     %rdi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem8.S b/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem8.S
index 4f3b950..43562ac 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem8.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/X64/ScanMem8.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem8):
     popq     %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem.S b/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem.S
index ad7131f..f74f0ed 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem.S
@@ -59,3 +59,4 @@ L_SetBytes:
     pop     %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem16.S b/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem16.S
index c947afd..3c886a7 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem16.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem16.S
@@ -58,3 +58,5 @@ L_SetWords:
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
+
diff --git a/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem32.S b/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem32.S
index 4ab8e3a..263a224 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem32.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem32.S
@@ -53,3 +53,4 @@ L_SetDwords:
 L1:
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem64.S b/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem64.S
index a4c7d8c..0851089 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem64.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem64.S
@@ -45,3 +45,4 @@ L0:
     mfence
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibMmx/X64/ZeroMem.S b/MdePkg/Library/BaseMemoryLibMmx/X64/ZeroMem.S
index 79f0b3d..1f951cc 100644
--- a/MdePkg/Library/BaseMemoryLibMmx/X64/ZeroMem.S
+++ b/MdePkg/Library/BaseMemoryLibMmx/X64/ZeroMem.S
@@ -55,3 +55,4 @@ L_ZeroBytes:
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
-- 
2.1.1 (Apple Git-51)


From e642973aefd0ee816fb0c4e2a872cbc4024fcf48 Mon Sep 17 00:00:00 2001
From: andrew fish <afish@apple.com>
Date: Thu, 6 Nov 2014 10:53:32 -0800
Subject: [PATCH 3/6] MdePkg: BaseMemoryLibOptDxe: Add missing
 ASM_FUNCTION_REMOVE_IF_UNREFERENCED

ASM_FUNCTION_REMOVE_IF_UNREFERENCED is required for Xcode -Os dead stripping.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Andrew Fish <afish@apple.com>
---
 MdePkg/Library/BaseMemoryLibOptDxe/Ia32/CompareMem.S | 2 ++
 MdePkg/Library/BaseMemoryLibOptDxe/Ia32/CopyMem.S    | 2 ++
 MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem16.S  | 2 ++
 MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem32.S  | 2 ++
 MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem64.S  | 2 ++
 MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem8.S   | 2 ++
 MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem.S     | 2 ++
 MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem16.S   | 2 ++
 MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem32.S   | 2 ++
 MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem64.S   | 2 ++
 MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ZeroMem.S    | 2 ++
 MdePkg/Library/BaseMemoryLibOptDxe/X64/CompareMem.S  | 1 +
 MdePkg/Library/BaseMemoryLibOptDxe/X64/CopyMem.S     | 2 ++
 MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem16.S   | 1 +
 MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem32.S   | 1 +
 MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem64.S   | 2 ++
 MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem8.S    | 1 +
 MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem.S      | 2 ++
 MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem16.S    | 1 +
 MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem32.S    | 1 +
 MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem64.S    | 1 +
 MdePkg/Library/BaseMemoryLibOptDxe/X64/ZeroMem.S     | 1 +
 22 files changed, 36 insertions(+)

diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/CompareMem.S b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/CompareMem.S
index 2375878..3581b44 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/CompareMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/CompareMem.S
@@ -53,3 +53,5 @@ ASM_PFX(InternalMemCompareMem):
     pop     %edi
     pop     %esi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/CopyMem.S b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/CopyMem.S
index bfc02d6..c7e4d82 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/CopyMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/CopyMem.S
@@ -83,3 +83,5 @@ L_CopyBytes:
     pop     %edi
     pop     %esi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem16.S b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem16.S
index e247d4a..fe2c5df 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem16.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem16.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem16):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem32.S b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem32.S
index 7f0a324..1a872c8 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem32.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem32.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem32):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem64.S b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem64.S
index c8f76f1..8ff497a 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem64.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem64.S
@@ -59,3 +59,5 @@ L1:
     cmovne  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem8.S b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem8.S
index 478b926..d2bd011 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem8.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ScanMem8.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem8):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem.S b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem.S
index 8c643ae..b8cc42b 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem.S
@@ -48,3 +48,5 @@ ASM_PFX(InternalMemSetMem):
     movl    8(%esp),%eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem16.S b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem16.S
index a31c8ae..c35b34f 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem16.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem16.S
@@ -41,3 +41,5 @@ ASM_PFX(InternalMemSetMem16):
     movl    8(%esp), %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem32.S b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem32.S
index 73e36b7..099eca7 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem32.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem32.S
@@ -41,3 +41,5 @@ ASM_PFX(InternalMemSetMem32):
     movl    8(%esp),%eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem64.S b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem64.S
index 51687d4..cf735d4 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem64.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/SetMem64.S
@@ -44,3 +44,5 @@ L0:
     movl    %edi, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ZeroMem.S b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ZeroMem.S
index 8ac5289..0c26690 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ZeroMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/Ia32/ZeroMem.S
@@ -47,3 +47,5 @@ ASM_PFX(InternalMemZeroMem):
     popl    %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/X64/CompareMem.S b/MdePkg/Library/BaseMemoryLibOptDxe/X64/CompareMem.S
index 1f6212a..219a79a 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/X64/CompareMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/X64/CompareMem.S
@@ -57,3 +57,4 @@ ASM_PFX(InternalMemCompareMem):
     popq    %rsi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/X64/CopyMem.S b/MdePkg/Library/BaseMemoryLibOptDxe/X64/CopyMem.S
index 13a47dc..236334c 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/X64/CopyMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/X64/CopyMem.S
@@ -80,3 +80,5 @@ L_CopyBytes:
     popq    %rdi
     popq    %rsi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem16.S b/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem16.S
index f72de1d..a28a948 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem16.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem16.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem16):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem32.S b/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem32.S
index d7ab3f8..6d0fa71 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem32.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem32.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem32):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem64.S b/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem64.S
index e7fb076..34c85e6 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem64.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem64.S
@@ -53,3 +53,5 @@ ASM_PFX(InternalMemScanMem64):
     cmovnz  %rcx, %rax
     popq    %rdi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem8.S b/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem8.S
index 3f0ad09..dc076ef 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem8.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/X64/ScanMem8.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem8):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem.S b/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem.S
index 2391348..dac75b5 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem.S
@@ -55,3 +55,5 @@ ASM_PFX(InternalMemSetMem):
     popq    %rbx
     popq    %rdi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem16.S b/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem16.S
index cb11f8a..a7d5e3e 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem16.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem16.S
@@ -45,3 +45,4 @@ ASM_PFX(InternalMemSetMem16):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem32.S b/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem32.S
index 9b9a63d..fe79906 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem32.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem32.S
@@ -45,3 +45,4 @@ ASM_PFX(InternalMemSetMem32):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem64.S b/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem64.S
index 90acd1f..be73794 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem64.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem64.S
@@ -44,3 +44,4 @@ ASM_PFX(InternalMemSetMem64):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/X64/ZeroMem.S b/MdePkg/Library/BaseMemoryLibOptDxe/X64/ZeroMem.S
index 3432f23..cf60cea 100644
--- a/MdePkg/Library/BaseMemoryLibOptDxe/X64/ZeroMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptDxe/X64/ZeroMem.S
@@ -49,3 +49,4 @@ ASM_PFX(InternalMemZeroMem):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
-- 
2.1.1 (Apple Git-51)


From c0488ce58198717c15e73a1232f1da2601f4d7d6 Mon Sep 17 00:00:00 2001
From: andrew fish <afish@apple.com>
Date: Thu, 6 Nov 2014 10:54:39 -0800
Subject: [PATCH 4/6] MdePkg: BaseMemoryLibOptPei:Add missing
 ASM_FUNCTION_REMOVE_IF_UNREFERENCED

ASM_FUNCTION_REMOVE_IF_UNREFERENCED is required for Xcode -Os dead stripping.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Andrew Fish <afish@apple.com>
---
 MdePkg/Library/BaseMemoryLibOptPei/Ia32/CompareMem.S | 2 ++
 MdePkg/Library/BaseMemoryLibOptPei/Ia32/CopyMem.S    | 2 ++
 MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem16.S  | 2 ++
 MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem32.S  | 2 ++
 MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem64.S  | 2 ++
 MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem8.S   | 2 ++
 MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem.S     | 2 ++
 MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem16.S   | 2 ++
 MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem32.S   | 2 ++
 MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem64.S   | 2 ++
 MdePkg/Library/BaseMemoryLibOptPei/Ia32/ZeroMem.S    | 2 ++
 11 files changed, 22 insertions(+)

diff --git a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/CompareMem.S b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/CompareMem.S
index 2375878..3581b44 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/CompareMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/CompareMem.S
@@ -53,3 +53,5 @@ ASM_PFX(InternalMemCompareMem):
     pop     %edi
     pop     %esi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/CopyMem.S b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/CopyMem.S
index 9d5873c..5054bfe 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/CopyMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/CopyMem.S
@@ -60,3 +60,5 @@ L_CopyDone:
     pop     %edi
     pop     %esi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem16.S b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem16.S
index c1a3748..51c7a2d 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem16.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem16.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem16):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem32.S b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem32.S
index 066fde4..4fd590e 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem32.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem32.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem32):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem64.S b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem64.S
index c8f76f1..8ff497a 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem64.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem64.S
@@ -59,3 +59,5 @@ L1:
     cmovne  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem8.S b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem8.S
index 478b926..d2bd011 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem8.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ScanMem8.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem8):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem.S b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem.S
index 8c643ae..b8cc42b 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem.S
@@ -48,3 +48,5 @@ ASM_PFX(InternalMemSetMem):
     movl    8(%esp),%eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem16.S b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem16.S
index a31c8ae..c35b34f 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem16.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem16.S
@@ -41,3 +41,5 @@ ASM_PFX(InternalMemSetMem16):
     movl    8(%esp), %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem32.S b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem32.S
index 73e36b7..099eca7 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem32.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem32.S
@@ -41,3 +41,5 @@ ASM_PFX(InternalMemSetMem32):
     movl    8(%esp),%eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem64.S b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem64.S
index 51687d4..cf735d4 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem64.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/SetMem64.S
@@ -44,3 +44,5 @@ L0:
     movl    %edi, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ZeroMem.S b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ZeroMem.S
index 8ac5289..0c26690 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ZeroMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/Ia32/ZeroMem.S
@@ -47,3 +47,5 @@ ASM_PFX(InternalMemZeroMem):
     popl    %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
-- 
2.1.1 (Apple Git-51)


From 0774834c17e56bd6494fdea530a0e9b4a92700ea Mon Sep 17 00:00:00 2001
From: andrew fish <afish@apple.com>
Date: Thu, 6 Nov 2014 10:55:19 -0800
Subject: [PATCH 5/6] MdePkg: BaseMemoryLibRepStr: Add missing
 ASM_FUNCTION_REMOVE_IF_UNREFERENCED

ASM_FUNCTION_REMOVE_IF_UNREFERENCED is required for Xcode -Os dead stripping.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Andrew Fish <afish@apple.com>
---
 MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.S | 2 ++
 MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.S    | 2 ++
 MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.S  | 2 ++
 MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.S  | 2 ++
 MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.S  | 2 ++
 MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.S   | 2 ++
 MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.S     | 2 ++
 MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.S   | 2 ++
 MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.S   | 2 ++
 MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.S   | 2 ++
 MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.S    | 2 ++
 MdePkg/Library/BaseMemoryLibRepStr/X64/CompareMem.S  | 1 +
 MdePkg/Library/BaseMemoryLibRepStr/X64/CopyMem.S     | 1 +
 MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem16.S   | 1 +
 MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem32.S   | 1 +
 MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem64.S   | 1 +
 MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem8.S    | 1 +
 MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem.S      | 1 +
 MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem16.S    | 1 +
 MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem32.S    | 1 +
 MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem64.S    | 1 +
 MdePkg/Library/BaseMemoryLibRepStr/X64/ZeroMem.S     | 1 +
 22 files changed, 33 insertions(+)

diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.S
index b509586..b771212 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.S
@@ -53,3 +53,5 @@ ASM_PFX(InternalMemCompareMem):
     pop     %edi
     pop     %esi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.S
index 5aeef75..5a38ba8 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.S
@@ -63,3 +63,5 @@ L_CopyBytes:
     pop     %edi
     pop     %esi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.S
index e247d4a..fe2c5df 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem16):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.S
index 066fde4..4fd590e 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem32):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.S
index b3435d7..d998ff4 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.S
@@ -59,3 +59,5 @@ L1:
     cmovne  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.S
index 5e451fd..8e73e46 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem8):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.S
index 9b1f1cb..fca425c 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.S
@@ -44,3 +44,5 @@ ASM_PFX(InternalMemSetMem):
     movl    8(%esp),%eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.S
index e35774a..b5e3c30 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.S
@@ -41,3 +41,5 @@ ASM_PFX(InternalMemSetMem16):
     movl    8(%esp), %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.S
index 0a8b1c3..05d43a3 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.S
@@ -41,3 +41,5 @@ ASM_PFX(InternalMemSetMem32):
     movl    8(%esp),%eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.S
index 2e4b7ce..1a42a20 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.S
@@ -44,3 +44,5 @@ L0:
     movl    %edi, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.S
index 86ba241..74ed58e 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.S
@@ -47,3 +47,5 @@ ASM_PFX(InternalMemZeroMem):
     popl    %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/X64/CompareMem.S b/MdePkg/Library/BaseMemoryLibRepStr/X64/CompareMem.S
index 3087aea..1c194fe 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/X64/CompareMem.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/X64/CompareMem.S
@@ -57,3 +57,4 @@ ASM_PFX(InternalMemCompareMem):
     popq    %rsi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/X64/CopyMem.S b/MdePkg/Library/BaseMemoryLibRepStr/X64/CopyMem.S
index 4d7a7d0..6ee88e3 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/X64/CopyMem.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/X64/CopyMem.S
@@ -64,3 +64,4 @@ L_CopyBytes:
     popq    %rsi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem16.S b/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem16.S
index 282dc3c..4dc7f15 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem16.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem16.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem16):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem32.S b/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem32.S
index 70426e7..101ccc8 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem32.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem32.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem32):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem64.S b/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem64.S
index eac15bc..07dd549 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem64.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem64.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem64):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem8.S b/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem8.S
index cea3f56..1e0ec13 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem8.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/X64/ScanMem8.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem8):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem.S b/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem.S
index 2e7edfa..be04dd3 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem.S
@@ -45,3 +45,4 @@ ASM_PFX(InternalMemSetMem):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem16.S b/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem16.S
index 4c291e0..6d5151c 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem16.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem16.S
@@ -45,3 +45,4 @@ ASM_PFX(InternalMemSetMem16):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem32.S b/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem32.S
index 9b9a63d..fe79906 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem32.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem32.S
@@ -45,3 +45,4 @@ ASM_PFX(InternalMemSetMem32):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem64.S b/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem64.S
index 6721693..1228cb7 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem64.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/X64/SetMem64.S
@@ -44,3 +44,4 @@ ASM_PFX(InternalMemSetMem64):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibRepStr/X64/ZeroMem.S b/MdePkg/Library/BaseMemoryLibRepStr/X64/ZeroMem.S
index 83f3901..444e3c2 100644
--- a/MdePkg/Library/BaseMemoryLibRepStr/X64/ZeroMem.S
+++ b/MdePkg/Library/BaseMemoryLibRepStr/X64/ZeroMem.S
@@ -48,3 +48,4 @@ ASM_PFX(InternalMemZeroMem):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
-- 
2.1.1 (Apple Git-51)


From 006fe5be2e69f48888dd29cdfb09ea01f5c3c75e Mon Sep 17 00:00:00 2001
From: andrew fish <afish@apple.com>
Date: Thu, 6 Nov 2014 10:56:35 -0800
Subject: [PATCH 6/6] MdePkg: BaseMemoryLibSse2: Add missing
 ASM_FUNCTION_REMOVE_IF_UNREFERENCED

ASM_FUNCTION_REMOVE_IF_UNREFERENCED is required for Xcode -Os dead stripping.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Andrew Fish <afish@apple.com>
---
 MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.S | 2 ++
 MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.S    | 2 ++
 MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.S  | 2 ++
 MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.S  | 2 ++
 MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.S  | 2 ++
 MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.S   | 2 ++
 MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.S     | 2 ++
 MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.S   | 2 ++
 MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.S   | 2 ++
 MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.S   | 2 ++
 MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.S    | 2 ++
 11 files changed, 22 insertions(+)

diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.S
index b509586..b771212 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.S
@@ -53,3 +53,5 @@ ASM_PFX(InternalMemCompareMem):
     pop     %edi
     pop     %esi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.S
index 17414ab..bc4e6a5 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.S
@@ -83,3 +83,5 @@ L_CopyBytes:
     pop     %edi
     pop     %esi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.S
index e247d4a..fe2c5df 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem16):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.S
index 066fde4..4fd590e 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem32):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.S
index b3435d7..d998ff4 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.S
@@ -59,3 +59,5 @@ L1:
     cmovne  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.S
index 5e451fd..8e73e46 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.S
@@ -50,3 +50,5 @@ ASM_PFX(InternalMemScanMem8):
     cmovnz  %ecx, %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.S
index 63e2a99..e928918 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.S
@@ -74,3 +74,5 @@ L_SetBytes:
     movl    8(%esp), %eax               # eax <- Buffer as return value
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.S
index 9222a18..bb54add 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.S
@@ -67,3 +67,5 @@ L_SetWords:
     movl    8(%esp), %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.S
index 0edbaa2..19094bd 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.S
@@ -66,3 +66,5 @@ L_SetDwords:
     movl    8(%esp), %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.S
index c9e6d63..613139e 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.S
@@ -56,3 +56,5 @@ L_SetQwords:
     movq    %xmm0, (%edx)
 L3:
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.S
index fc9f059..58d3b0a 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.S
@@ -63,3 +63,5 @@ L_ZeroBytes:
     movl    8(%esp), %eax
     pop     %edi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
-- 
2.1.1 (Apple Git-51)

