]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Library/CompilerIntrinsicsLib/memset.c
ArmPkg/CompilerIntrinsicsLib ARM: make memset() weak again
[mirror_edk2.git] / ArmPkg / Library / CompilerIntrinsicsLib / memset.c
CommitLineData
a0cf6b8d
AB
1//------------------------------------------------------------------------------
2//
3// Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
4//
5// This program and the accompanying materials are licensed and made
6// available under the terms and conditions of the BSD License which
7// accompanies this distribution. The full text of the license may be
8// found at http://opensource.org/licenses/bsd-license.php
9//
10// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
12// IMPLIED.
13//
14//------------------------------------------------------------------------------
15
16typedef __SIZE_TYPE__ size_t;
17
18static __attribute__((__used__))
19void *__memset(void *s, int c, size_t n)
20{
21 unsigned char *d = s;
22
23 while (n--)
24 *d++ = c;
25
26 return s;
27}
28
29__attribute__((__alias__("__memset")))
30void *memset(void *dest, int c, size_t n);
31
32#ifdef __arm__
33
bc54e50e
AB
34//
35// Other modules (such as CryptoPkg/IntrinsicLib) may provide another
36// implementation of memset(), which may conflict with this one if this
37// object was pulled into the link due to the definitions below. So make
38// our memset() 'weak' to let the other implementation take precedence.
39//
40__attribute__((__weak__))
41void *memset(void *dest, int c, size_t n);
42
a0cf6b8d
AB
43void __aeabi_memset(void *dest, size_t n, int c)
44{
45 __memset(dest, c, n);
46}
47
48__attribute__((__alias__("__aeabi_memset")))
49void __aeabi_memset4(void *dest, size_t n, int c);
50
51__attribute__((__alias__("__aeabi_memset")))
52void __aeabi_memset8(void *dest, size_t n, int c);
53
54void __aeabi_memclr(void *dest, size_t n)
55{
56 __memset(dest, 0, n);
57}
58
59__attribute__((__alias__("__aeabi_memclr")))
60void __aeabi_memclr4(void *dest, size_t n);
61
62__attribute__((__alias__("__aeabi_memclr")))
63void __aeabi_memclr8(void *dest, size_t n);
64
65#endif