[PATCH v3 2/2] lib: sbi: Fix compile errors using -Os option
Anup Patel
anup.patel at wdc.com
Thu Dec 2 04:29:29 PST 2021
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>
---
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