// ------------------------------------------------------------------------------ | |
// | |
// 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 |