Ard Biesheuvel f8c51389c6 ArmPkg/CompilerIntrinsicsLib: make the default memset() weak
The ARM compiler intrinsics library defines __aeabi_memset() and
memset() in the same object, which means that both will be pulled
in if either is referenced.

The IntrinsicLib in CryptoPkg defines its own, preferred memset(),
which may clash with our memset(). So make our version weak.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
2016-08-05 16:32:36 +02:00

62 lines
1.7 KiB
ArmAsm

#------------------------------------------------------------------------------
#
# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
# Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#------------------------------------------------------------------------------
.text
.syntax unified
.align 2
GCC_ASM_EXPORT (memset)
GCC_ASM_EXPORT (__aeabi_memset)
# VOID
# EFIAPI
# __aeabi_memset (
# IN VOID *Destination,
# IN UINT32 Size
# IN UINT32 Character,
# );
ASM_PFX(__aeabi_memset):
subs ip, r1, #0
bxeq lr
mov r1, r2
b L10
# VOID
# EFIAPI
# memset (
# IN VOID *Destination,
# IN UINT32 Character,
# IN UINT32 Size
# );
//
// This object may be pulled in to satisfy an undefined reference to
// __aeabi_memset above, but in some cases, memset() is already provided
// by another library (i.e., CryptoPkg/IntrinsicLib), in which case we
// prefer the other version. So allow this one to be overridden by
// giving it weak linkage.
//
.weak memset
ASM_PFX(memset):
subs ip, r2, #0
bxeq lr
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 1, uses_anonymous_args = 0
L10:
strb r1, [r0], #1
subs ip, ip, #1
@ While size is not 0
bne L10
bx lr