Clang does not like separate definitions for the __alias__ and the __weak__ attributes, so merge the definitions into one. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
//------------------------------------------------------------------------------
 | 
						|
//
 | 
						|
// Copyright (c) 2016, Linaro 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.
 | 
						|
//
 | 
						|
//------------------------------------------------------------------------------
 | 
						|
 | 
						|
typedef __SIZE_TYPE__ size_t;
 | 
						|
 | 
						|
static __attribute__((__used__))
 | 
						|
void *__memset(void *s, int c, size_t n)
 | 
						|
{
 | 
						|
  unsigned char *d = s;
 | 
						|
 | 
						|
  while (n--)
 | 
						|
    *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
 |