diff --git a/arch/risc-v/src/qemu-rv/qemu_rv_start.c b/arch/risc-v/src/qemu-rv/qemu_rv_start.c index 76197354b528e..63d7db565a8e9 100644 --- a/arch/risc-v/src/qemu-rv/qemu_rv_start.c +++ b/arch/risc-v/src/qemu-rv/qemu_rv_start.c @@ -100,6 +100,14 @@ static void qemu_rv_copy_data(void) * end of all of the other read-only data (.text, .rodata) at _eronly. */ + /* Check overlap to avoid copying */ + + if (_edata - _sdata + _eronly >= _sdata && + _edata - _sdata + _eronly <= _edata) + { + return; + } + for (src = (const uint32_t *)_eronly, dest = (uint32_t *)_sdata; dest < (uint32_t *)_edata; )