| // ------------------------------------------------------------------------------ | |
| // | |
| // Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR> | |
| // Copyright (c) 2021, Arm Limited. All rights reserved.<BR> | |
| // | |
| // SPDX-License-Identifier: BSD-2-Clause-Patent | |
| // | |
| // ------------------------------------------------------------------------------ | |
| typedef __SIZE_TYPE__ size_t; | |
| static __attribute__ ((__used__)) | |
| void * | |
| __memset ( | |
| void *s, | |
| int c, | |
| size_t n | |
| ) | |
| { | |
| unsigned char *d; | |
| d = s; | |
| while (n-- != 0) { | |
| *d++ = c; | |
| } | |
| return s; | |
| } | |
| // | |
| // Other modules (such as CryptoPkg/IntrinsicLib) may provide another | |
| // implementation of memset(), which may conflict with this one if this | |
| // object was pulled into the link due to the definitions below. So make | |
| // our memset() 'weak' to let the other implementation take precedence. | |
| // | |
| __attribute__ ((__weak__, __alias__ ("__memset"))) | |
| void * | |
| memset ( | |
| void *dest, | |
| int c, | |
| size_t n | |
| ); | |
| #ifdef __arm__ | |
| void | |
| __aeabi_memset ( | |
| void *dest, | |
| size_t n, | |
| int c | |
| ) | |
| { | |
| __memset (dest, c, n); | |
| } | |
| __attribute__ ((__alias__ ("__aeabi_memset"))) | |
| void | |
| __aeabi_memset4 ( | |
| void *dest, | |
| size_t n, | |
| int c | |
| ); | |
| __attribute__ ((__alias__ ("__aeabi_memset"))) | |
| void | |
| __aeabi_memset8 ( | |
| void *dest, | |
| size_t n, | |
| int c | |
| ); | |
| void | |
| __aeabi_memclr ( | |
| void *dest, | |
| size_t n | |
| ) | |
| { | |
| __memset (dest, 0, n); | |
| } | |
| __attribute__ ((__alias__ ("__aeabi_memclr"))) | |
| void | |
| __aeabi_memclr4 ( | |
| void *dest, | |
| size_t n | |
| ); | |
| __attribute__ ((__alias__ ("__aeabi_memclr"))) | |
| void | |
| __aeabi_memclr8 ( | |
| void *dest, | |
| size_t n | |
| ); | |
| #endif |