From edc4172abefaecf7a263dc2cb20f36888e3fb723 Mon Sep 17 00:00:00 2001
From: andrew fish <afish@apple.com>
Date: Fri, 7 Nov 2014 16:51:39 -0800
Subject: [PATCH 1/7] 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/ReadMsr64.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/SetJump.S               |  2 ++
 MdePkg/Library/BaseLib/X64/SwitchStack.S           |  6 +++--
 MdePkg/Library/BaseLib/X64/Thunk16.S               |  2 ++
 MdePkg/Library/BaseLib/X64/Wbinvd.S                |  2 ++
 43 files changed, 99 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/ReadMsr64.S b/MdePkg/Library/BaseLib/Ia32/ReadMsr64.S
index 43eb35a..bff5634 100644
--- a/MdePkg/Library/BaseLib/Ia32/ReadMsr64.S
+++ b/MdePkg/Library/BaseLib/Ia32/ReadMsr64.S
@@ -34,3 +34,5 @@ ASM_PFX(AsmReadMsr64):
     movl    4(%esp), %ecx
     rdmsr
     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/SetJump.S b/MdePkg/Library/BaseLib/X64/SetJump.S
index ea9e225..e1b2edd 100644
--- a/MdePkg/Library/BaseLib/X64/SetJump.S
+++ b/MdePkg/Library/BaseLib/X64/SetJump.S
@@ -51,3 +51,5 @@ ASM_PFX(SetJump):
     movdqu  %xmm15, 0xE8(%rcx)     
     xor    %rax,%rax
     jmpq   *%rdx
+
+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 71e45848aecd6c6e12673943f1b2ab0ccc268c98 Mon Sep 17 00:00:00 2001
From: andrew fish <afish@apple.com>
Date: Fri, 7 Nov 2014 16:52:14 -0800
Subject: [PATCH 2/7] MdePkg: BaseCpuLib: 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/BaseCpuLib/X64/CpuFlushTlb.S | 2 ++
 MdePkg/Library/BaseCpuLib/X64/CpuSleep.S    | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/MdePkg/Library/BaseCpuLib/X64/CpuFlushTlb.S b/MdePkg/Library/BaseCpuLib/X64/CpuFlushTlb.S
index 852ce14..00521d7 100644
--- a/MdePkg/Library/BaseCpuLib/X64/CpuFlushTlb.S
+++ b/MdePkg/Library/BaseCpuLib/X64/CpuFlushTlb.S
@@ -33,3 +33,5 @@ ASM_PFX(CpuFlushTlb):
     mov     %cr3, %rax
     mov     %rax, %cr3
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseCpuLib/X64/CpuSleep.S b/MdePkg/Library/BaseCpuLib/X64/CpuSleep.S
index cf76368..c5d1fda 100644
--- a/MdePkg/Library/BaseCpuLib/X64/CpuSleep.S
+++ b/MdePkg/Library/BaseCpuLib/X64/CpuSleep.S
@@ -32,3 +32,5 @@ ASM_GLOBAL ASM_PFX(CpuSleep)
 ASM_PFX(CpuSleep):
     hlt
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
-- 
2.1.1 (Apple Git-51)


From 6cd198b864766a7e873c2fa4d09bd792279e9b2f Mon Sep 17 00:00:00 2001
From: andrew fish <afish@apple.com>
Date: Fri, 7 Nov 2014 16:52:52 -0800
Subject: [PATCH 3/7] MdePkg: BaseMemoryLibMmx: 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/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 7df454e4bdb5b8378b91c2315805dc79b6501842 Mon Sep 17 00:00:00 2001
From: andrew fish <afish@apple.com>
Date: Fri, 7 Nov 2014 16:53:55 -0800
Subject: [PATCH 4/7] 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 ea693be2deef716461cfaa1e6dddb4c86e83aa31 Mon Sep 17 00:00:00 2001
From: andrew fish <afish@apple.com>
Date: Fri, 7 Nov 2014 16:54:38 -0800
Subject: [PATCH 5/7] 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 ++
 MdePkg/Library/BaseMemoryLibOptPei/X64/CompareMem.S  |  1 +
 MdePkg/Library/BaseMemoryLibOptPei/X64/CopyMem.S     | 13 +++++++------
 MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem16.S   |  2 ++
 MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem32.S   |  1 +
 MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem64.S   |  1 +
 MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem8.S    |  1 +
 MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem.S      |  1 +
 MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem16.S    |  1 +
 MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem32.S    |  1 +
 MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem64.S    |  1 +
 MdePkg/Library/BaseMemoryLibOptPei/X64/ZeroMem.S     |  1 +
 22 files changed, 40 insertions(+), 6 deletions(-)

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
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/X64/CompareMem.S b/MdePkg/Library/BaseMemoryLibOptPei/X64/CompareMem.S
index 26ed8dd..9ed1461 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/X64/CompareMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/X64/CompareMem.S
@@ -57,3 +57,4 @@ ASM_PFX(InternalMemCompareMem):
     popq    %rsi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/X64/CopyMem.S b/MdePkg/Library/BaseMemoryLibOptPei/X64/CopyMem.S
index fad30a5..e151bda 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/X64/CopyMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/X64/CopyMem.S
@@ -43,20 +43,20 @@ ASM_PFX(InternalMemCopyMem):
     leaq    -1(%rsi, %r8,), %r9         # r9 <- End of Source
     cmpq    %rdi, %rsi
     movq    %rdi, %rax                  # rax <- Destination as return value
-    jae     _InternalMemCopyMem_al_0000
+    jae     L_InternalMemCopyMem_al_0000
     cmpq    %rdi, %r9
-    jae     _atSym_CopyBackward         # Copy backward if overlapped
-_InternalMemCopyMem_al_0000:
+    jae     L_atSym_CopyBackward         # Copy backward if overlapped
+L_InternalMemCopyMem_al_0000:
     movq    %r8, %rcx
     andq    $7, %r8
     shrq    $3, %rcx
     rep     movsq                       # Copy as many Qwords as possible
-    jmp     _atSym_CopyBytes
-_atSym_CopyBackward:
+    jmp     L_atSym_CopyBytes
+L_atSym_CopyBackward:
     movq    %r9, %rsi                   # rsi <- End of Source
     leaq    -1(%rdi, %r8), %rdi         # rdi <- End of Destination
     std                                 # set direction flag
-_atSym_CopyBytes:
+L_atSym_CopyBytes:
     movq    %r8, %rcx
     rep     movsb                       # Copy bytes backward
     cld
@@ -64,3 +64,4 @@ _atSym_CopyBytes:
     popq    %rsi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem16.S b/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem16.S
index 282dc3c..4aaf43e 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem16.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem16.S
@@ -54,3 +54,5 @@ ASM_PFX(InternalMemScanMem16):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
+
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem32.S b/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem32.S
index 70426e7..101ccc8 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem32.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem32.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem32):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem64.S b/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem64.S
index eac15bc..07dd549 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem64.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem64.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem64):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem8.S b/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem8.S
index cea3f56..1e0ec13 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem8.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/X64/ScanMem8.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem8):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem.S b/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem.S
index 5dead6c..b07e57c 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem.S
@@ -45,3 +45,4 @@ ASM_PFX(InternalMemSetMem):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem16.S b/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem16.S
index 4c291e0..6d5151c 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem16.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem16.S
@@ -45,3 +45,4 @@ ASM_PFX(InternalMemSetMem16):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem32.S b/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem32.S
index 9b9a63d..fe79906 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem32.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem32.S
@@ -45,3 +45,4 @@ ASM_PFX(InternalMemSetMem32):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem64.S b/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem64.S
index 6721693..1228cb7 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem64.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/X64/SetMem64.S
@@ -44,3 +44,4 @@ ASM_PFX(InternalMemSetMem64):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibOptPei/X64/ZeroMem.S b/MdePkg/Library/BaseMemoryLibOptPei/X64/ZeroMem.S
index 83f3901..444e3c2 100644
--- a/MdePkg/Library/BaseMemoryLibOptPei/X64/ZeroMem.S
+++ b/MdePkg/Library/BaseMemoryLibOptPei/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 9dbf87ec5a9a4fbb73ec04d68e0f0e99f94a68e4 Mon Sep 17 00:00:00 2001
From: andrew fish <afish@apple.com>
Date: Fri, 7 Nov 2014 16:55:26 -0800
Subject: [PATCH 6/7] 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 d66fe9abc195015ed7a9ede12d16c0aa5fbb0f76 Mon Sep 17 00:00:00 2001
From: andrew fish <afish@apple.com>
Date: Fri, 7 Nov 2014 16:55:43 -0800
Subject: [PATCH 7/7] 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 ++
 MdePkg/Library/BaseMemoryLibSse2/X64/CompareMem.S  | 1 +
 MdePkg/Library/BaseMemoryLibSse2/X64/CopyMem.S     | 2 ++
 MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem16.S   | 1 +
 MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem32.S   | 1 +
 MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem64.S   | 1 +
 MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem8.S    | 1 +
 MdePkg/Library/BaseMemoryLibSse2/X64/SetMem.S      | 2 ++
 MdePkg/Library/BaseMemoryLibSse2/X64/SetMem16.S    | 2 ++
 MdePkg/Library/BaseMemoryLibSse2/X64/SetMem32.S    | 2 ++
 MdePkg/Library/BaseMemoryLibSse2/X64/SetMem64.S    | 1 +
 MdePkg/Library/BaseMemoryLibSse2/X64/ZeroMem.S     | 2 ++
 22 files changed, 38 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
diff --git a/MdePkg/Library/BaseMemoryLibSse2/X64/CompareMem.S b/MdePkg/Library/BaseMemoryLibSse2/X64/CompareMem.S
index 26ed8dd..9ed1461 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/X64/CompareMem.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/X64/CompareMem.S
@@ -57,3 +57,4 @@ ASM_PFX(InternalMemCompareMem):
     popq    %rsi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/X64/CopyMem.S b/MdePkg/Library/BaseMemoryLibSse2/X64/CopyMem.S
index d8a58a7..4768630 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/X64/CopyMem.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/X64/CopyMem.S
@@ -81,3 +81,5 @@ L_CopyBytes:
     popq    %rdi
     popq    %rsi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem16.S b/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem16.S
index 282dc3c..4dc7f15 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem16.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem16.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem16):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem32.S b/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem32.S
index eb91daf..d752816 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem32.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem32.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem32):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem64.S b/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem64.S
index 20d20aa..057f247 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem64.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem64.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem64):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem8.S b/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem8.S
index b1715ea..ed45448 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem8.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/X64/ScanMem8.S
@@ -54,3 +54,4 @@ ASM_PFX(InternalMemScanMem8):
     popq    %rdi
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem.S b/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem.S
index eb4ce80..f05578e 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem.S
@@ -70,3 +70,5 @@ L_SetBytes:
     movq    %r9, %rax                   # rax <- Return value
     popq    %rdi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem16.S b/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem16.S
index 74fef09..a8e150c 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem16.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem16.S
@@ -68,3 +68,5 @@ L_SetWords:
     movq    %r9, %rax
     popq    %rdi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem32.S b/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem32.S
index 24103cf..a916bfc 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem32.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem32.S
@@ -67,3 +67,5 @@ L_SetDwords:
     movq    %r9, %rax
     popq    %rdi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem64.S b/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem64.S
index c44ec08..46614f7 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem64.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/X64/SetMem64.S
@@ -58,3 +58,4 @@ L_SetQwords:
 L2:
     ret
 
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/MdePkg/Library/BaseMemoryLibSse2/X64/ZeroMem.S b/MdePkg/Library/BaseMemoryLibSse2/X64/ZeroMem.S
index 3b00ce7..7b26f5b 100644
--- a/MdePkg/Library/BaseMemoryLibSse2/X64/ZeroMem.S
+++ b/MdePkg/Library/BaseMemoryLibSse2/X64/ZeroMem.S
@@ -63,3 +63,5 @@ L_ZeroBytes:
     movq    %r8, %rax
     popq    %rdi
     ret
+
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED
-- 
2.1.1 (Apple Git-51)

