Arm CI build error: - ArmPkg/Library/CompilerIntrinsicsLib/memset.c:39:1: warning: type of ‘memset’ does not match original declaration [-Wlto-type-mismatch] MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.c:123:1: note: type ‘char’ should match type ‘int’ - multiple definition of `memcpy'; OnigurumaUefiPort.obj (symbol from plugin):(.text+0x0): first defined here Fix: - Update memset() implementation to match memset() definition in ArmPkg/Library/CompilerIntrinsicsLib. - memcpy() is supported by ArmPkg/Library/CompilerIntrinsicsLib. Exclude it in OnigurumaUefiPort.c. Signed-off-by: Nickle Wang <nicklew@nvidia.com> Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Liming Gao <gaoliming@byosoft.com.cn> Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Nick Ramirez <nramirez@nvidia.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			156 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
| 
 | |
|   Module to rewrite stdlib references within Oniguruma
 | |
| 
 | |
|   (C) Copyright 2014-2021 Hewlett Packard Enterprise Development LP<BR>
 | |
|   Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
 | |
|   Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
 | |
| 
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| **/
 | |
| #include "OnigurumaUefiPort.h"
 | |
| 
 | |
| #define ONIGMEM_HEAD_SIGNATURE  SIGNATURE_32('o','m','h','d')
 | |
| 
 | |
| typedef struct {
 | |
|   UINT32    Signature;
 | |
|   UINTN     Size;
 | |
| } ONIGMEM_HEAD;
 | |
| 
 | |
| #define ONIGMEM_OVERHEAD  sizeof(ONIGMEM_HEAD)
 | |
| 
 | |
| int EFIAPI
 | |
| sprintf_s (
 | |
|   char        *str,
 | |
|   size_t      sizeOfBuffer,
 | |
|   char const  *fmt,
 | |
|   ...
 | |
|   )
 | |
| {
 | |
|   VA_LIST  Marker;
 | |
|   int      NumberOfPrinted;
 | |
| 
 | |
|   VA_START (Marker, fmt);
 | |
|   NumberOfPrinted = (int)AsciiVSPrint (str, sizeOfBuffer, fmt, Marker);
 | |
|   VA_END (Marker);
 | |
| 
 | |
|   return NumberOfPrinted;
 | |
| }
 | |
| 
 | |
| int
 | |
| OnigStrCmp (
 | |
|   const char  *Str1,
 | |
|   const char  *Str2
 | |
|   )
 | |
| {
 | |
|   return (int)AsciiStrCmp (Str1, Str2);
 | |
| }
 | |
| 
 | |
| int
 | |
| strlen (
 | |
|   const char  *str
 | |
|   )
 | |
| {
 | |
|   return strlen_s (str, MAX_STRING_SIZE);
 | |
| }
 | |
| 
 | |
| void *
 | |
| malloc (
 | |
|   size_t  size
 | |
|   )
 | |
| {
 | |
|   ONIGMEM_HEAD  *PoolHdr;
 | |
|   UINTN         NewSize;
 | |
|   VOID          *Data;
 | |
| 
 | |
|   NewSize = (UINTN)(size) + ONIGMEM_OVERHEAD;
 | |
| 
 | |
|   Data = AllocatePool (NewSize);
 | |
|   if (Data != NULL) {
 | |
|     PoolHdr            = (ONIGMEM_HEAD *)Data;
 | |
|     PoolHdr->Signature = ONIGMEM_HEAD_SIGNATURE;
 | |
|     PoolHdr->Size      = size;
 | |
| 
 | |
|     return (VOID *)(PoolHdr + 1);
 | |
|   }
 | |
| 
 | |
|   return NULL;
 | |
| }
 | |
| 
 | |
| void *
 | |
| realloc (
 | |
|   void    *ptr,
 | |
|   size_t  size
 | |
|   )
 | |
| {
 | |
|   ONIGMEM_HEAD  *OldPoolHdr;
 | |
|   ONIGMEM_HEAD  *NewPoolHdr;
 | |
|   UINTN         OldSize;
 | |
|   UINTN         NewSize;
 | |
|   VOID          *Data;
 | |
| 
 | |
|   NewSize = (UINTN)size + ONIGMEM_OVERHEAD;
 | |
|   Data    = AllocatePool (NewSize);
 | |
|   if (Data != NULL) {
 | |
|     NewPoolHdr            = (ONIGMEM_HEAD *)Data;
 | |
|     NewPoolHdr->Signature = ONIGMEM_HEAD_SIGNATURE;
 | |
|     NewPoolHdr->Size      = size;
 | |
|     if (ptr != NULL) {
 | |
|       OldPoolHdr = (ONIGMEM_HEAD *)ptr - 1;
 | |
|       ASSERT (OldPoolHdr->Signature == ONIGMEM_HEAD_SIGNATURE);
 | |
|       OldSize = OldPoolHdr->Size;
 | |
| 
 | |
|       CopyMem ((VOID *)(NewPoolHdr + 1), ptr, MIN (OldSize, size));
 | |
|       FreePool ((VOID *)OldPoolHdr);
 | |
|     }
 | |
| 
 | |
|     return (VOID *)(NewPoolHdr + 1);
 | |
|   }
 | |
| 
 | |
|   return NULL;
 | |
| }
 | |
| 
 | |
| #if !defined (MDE_CPU_ARM)
 | |
| void *
 | |
| memcpy (
 | |
|   void          *dest,
 | |
|   const void    *src,
 | |
|   unsigned int  count
 | |
|   )
 | |
| {
 | |
|   return CopyMem (dest, src, (UINTN)count);
 | |
| }
 | |
| 
 | |
| #endif
 | |
| 
 | |
| void *
 | |
| memset (
 | |
|   void          *dest,
 | |
|   int           ch,
 | |
|   unsigned int  count
 | |
|   )
 | |
| {
 | |
|   return SetMem (dest, (UINTN)count, (UINT8)ch);
 | |
| }
 | |
| 
 | |
| void
 | |
| free (
 | |
|   void  *ptr
 | |
|   )
 | |
| {
 | |
|   VOID          *EvalOnce;
 | |
|   ONIGMEM_HEAD  *PoolHdr;
 | |
| 
 | |
|   EvalOnce = ptr;
 | |
|   if (EvalOnce == NULL) {
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   PoolHdr = (ONIGMEM_HEAD *)EvalOnce - 1;
 | |
|   if (PoolHdr->Signature == ONIGMEM_HEAD_SIGNATURE) {
 | |
|     FreePool (PoolHdr);
 | |
|   } else {
 | |
|     FreePool (EvalOnce);
 | |
|   }
 | |
| }
 |