[PATCH v3 2/2] lib: sbi: Fix compile errors using -Os option

Xiang W wxjstz at 126.com
Thu Dec 2 06:30:12 PST 2021


在 2021-12-02星期四的 17:59 +0530,Anup Patel写道:
> When building with -Os option along with -ffreestanding, both GCC
> and clang will add implicit calls to memcpy() and memcpy() for stack
> variables initialized in declaration.
> 
> The C standard as per Clause 4, the compiler cannot necessarily
> assume that anything beyond:
> 
>  * float.h
>  * iso646.h
>  * limits.h
>  * stdalign.h
>  * stdarg.h
>  * stdbool.h
>  * stddef.h
>  * stdint.h
>  * stdnoreturn.h
>  * fenv.h
>  * math.h
>  * and the numeric conversion functions of stdlib.h.
> 
> This patch maps memcpy() and memset() as weak-alias of sbi_memcpy()
> and sbi_memset() respectively so that implicit calls to memcpy()
> and memset() will compile properly.
> 
> Signed-off-by: Anup Patel <anup.patel at wdc.com>
Reviewed-by: Xiang W <wxjstz at 126.com>
> ---
>  lib/sbi/sbi_string.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/lib/sbi/sbi_string.c b/lib/sbi/sbi_string.c
> index c87bce9..c67c02e 100644
> --- a/lib/sbi/sbi_string.c
> +++ b/lib/sbi/sbi_string.c
> @@ -122,6 +122,9 @@ void *sbi_memset(void *s, int c, size_t count)
>         return s;
>  }
>  
> +void *memset(void *s, int c, size_t count) \
> +__attribute__((weak, alias("sbi_memset")));
> +
>  void *sbi_memcpy(void *dest, const void *src, size_t count)
>  {
>         char *temp1       = dest;
> @@ -135,6 +138,9 @@ void *sbi_memcpy(void *dest, const void *src,
> size_t count)
>         return dest;
>  }
>  
> +void *memcpy(void *dest, const void *src, size_t count) \
> +__attribute__((weak, alias("sbi_memcpy")));
> +
>  void *sbi_memmove(void *dest, const void *src, size_t count)
>  {
>         char *temp1       = (char *)dest;
> -- 
> 2.25.1
> 
> 





More information about the opensbi mailing list