Thread (2 messages) 2 messages, 2 authors, 2021-12-23
DORMANTno replies REVIEWED: 1 (0M)

[PATCH v2] firmware: Move memcpy/memset mapping to fw_base.S

From: Atish Patra <hidden>
Date: 2021-12-23 09:28:35

On Wed, Dec 22, 2021 at 9:27 PM Anup Patel [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Some of the external firmwares using OpenSBI as library are facing
issues with the weak memcpy() and memset() aliases in libsbi.a so
we move these to fw_base.S. This way mapping of implicit memcpy()
or memset() calls to sbi_memcpy() or sbi_memset() will only be done
for OpenSBI firmwares.
(Refer, https://github.com/riscv-software-src/opensbi/issues/234)

Signed-off-by: Anup Patel <redacted>
---
 firmware/fw_base.S   | 14 ++++++++++++++
 lib/sbi/sbi_string.c |  6 ------
 2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/firmware/fw_base.S b/firmware/fw_base.S
index 1569e60..3669420 100644
--- a/firmware/fw_base.S
+++ b/firmware/fw_base.S
@@ -561,6 +561,20 @@ fw_platform_init:
        add     a0, a1, zero
        ret

+       /* Map implicit memcpy() added by compiler to sbi_memcpy() */
+       .section .text
+       .align 3
+       .globl memcpy
+memcpy:
+       tail    sbi_memcpy
+
+       /* Map implicit memset() added by compiler to sbi_memset() */
+       .section .text
+       .align 3
+       .globl memset
+memset:
+       tail    sbi_memset
+
 .macro TRAP_SAVE_AND_SETUP_SP_T0
        /* Swap TP and MSCRATCH */
        csrrw   tp, CSR_MSCRATCH, tp
diff --git a/lib/sbi/sbi_string.c b/lib/sbi/sbi_string.c
index c67c02e..c87bce9 100644
--- a/lib/sbi/sbi_string.c
+++ b/lib/sbi/sbi_string.c
@@ -122,9 +122,6 @@ 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;
@@ -138,9 +135,6 @@ 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
Reviewed-by: Atish Patra <redacted>

-- 
Regards,
Atish
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help