Reviewed-by: Jaben Carsey <[email protected]>

> -----Original Message-----
> From: Ard Biesheuvel [mailto:[email protected]]
> Sent: Monday, August 08, 2016 4:12 AM
> To: [email protected]; [email protected]; Carsey, Jaben
> <[email protected]>
> Cc: [email protected]; [email protected]; Ard Biesheuvel
> <[email protected]>
> Subject: [PATCH 2/2] StdLib/LibC ARM AARCH64: do not redefine compiler
> intrinsics
> Importance: High
> 
> The memset() function is a compiler intrinsics on AARCH64 and ARM, and
> so is memmove() on ARM. Usually, redefining them as LibC currently does
> is not a problem since only one version will be selected at link time
> from the various static libraries that provide implementations. However,
> under LTO, this is slightly different, since explicit references (in the
> C code) and implicit references (emitted by the compiler backend) may
> resolve to different versions (LTO vs non-LTO), causing conflicts.
> 
> So simply omit them for ARM/AARCH64 resp. ARM.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ard Biesheuvel <[email protected]>
> ---
>  StdLib/LibC/String/Copying.c | 2 ++
>  StdLib/LibC/String/Misc.c    | 2 ++
>  2 files changed, 4 insertions(+)
> 
> diff --git a/StdLib/LibC/String/Copying.c b/StdLib/LibC/String/Copying.c
> index 96be24b9a9bd..3234eccf0808 100644
> --- a/StdLib/LibC/String/Copying.c
> +++ b/StdLib/LibC/String/Copying.c
> @@ -39,6 +39,7 @@ memcpy(void * __restrict s1, const void * __restrict s2,
> size_t n)
>  }
>  #endif  /* !(defined(MDE_CPU_IPF) && defined(__GCC)) */
> 
> +#if !(defined(MDE_CPU_ARM) && defined(__GNUC__))
>  /** The memmove function copies n characters from the object pointed to
> by s2
>      into the object pointed to by s1. Copying takes place as if the n
>      characters from the object pointed to by s2 are first copied into a
> @@ -57,6 +58,7 @@ memmove(void *s1, const void *s2, size_t n)
>  {
>    return CopyMem( s1, s2, n);
>  }
> +#endif
> 
>  /** The strcpy function copies the string pointed to by s2 (including the
>      terminating null character) into the array pointed to by s1. If copying
> diff --git a/StdLib/LibC/String/Misc.c b/StdLib/LibC/String/Misc.c
> index 99328252ed50..f024136446e7 100644
> --- a/StdLib/LibC/String/Misc.c
> +++ b/StdLib/LibC/String/Misc.c
> @@ -26,6 +26,7 @@
> 
>  extern char *sys_errlist[];
> 
> +#if !((defined(MDE_CPU_ARM) || defined(MDE_CPU_AARCH64)) &&
> defined(__GNUC__))
>  /** The memset function copies the value of c (converted to an unsigned
> char)
>      into each of the first n characters of the object pointed to by s.
> 
> @@ -36,6 +37,7 @@ memset(void *s, int c, size_t n)
>  {
>    return SetMem( s, (UINTN)n, (UINT8)c);
>  }
> +#endif
> 
>  int
>  strerror_r(int errnum, char *buf, size_t buflen)
> --
> 2.7.4

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to