OSDev.org https://forum.osdev.org/ |
|
Crash in memmove function https://forum.osdev.org/viewtopic.php?f=1&t=56505 |
Page 1 of 1 |
Author: | zungnguyen [ Wed Sep 28, 2022 11:36 pm ] |
Post subject: | Crash in memmove function |
Hi everyone, It ís me again . I have an issue with memmove function. When my OS run into memmove function. Everything works correctly if there is no interrupt happened. If there is interrupt happened, when the memmove's thread back, it raises exception General Protection. The context is saved correctly. Please help Quote: void* memmove(void* des, void* src, size_t size)
{ size_t numq = size >> 3; size_t numb = size & 0b111; if (des < src) { uint64 *qdes = (uint64*)des; uint64 *qsrc = (uint64*)src; for (size_t i = 0; i < numq; ++i) { qdes[i] = qsrc[i]; // printf(" %d ", i); } uint8 *bdes = (uint8*)(des + numq * ; uint8 *bsrc = (uint8*)(src + numq * ; for (size_t i = 0; i < numb; ++i) { bdes[i] = bsrc[i]; } } return des; } |
Author: | kzinti [ Thu Sep 29, 2022 1:13 am ] |
Post subject: | Re: Crash in memmove function |
zungnguyen wrote: The context is saved correctly. Is it restored correctly? Clearly both can't be true. |
Author: | zungnguyen [ Thu Sep 29, 2022 1:44 am ] |
Post subject: | Re: Crash in memmove function |
kzinti wrote: zungnguyen wrote: The context is saved correctly. Is it restored correctly? Clearly both can't be true. Yep, but i handle interrupt in the same stack, can it change data in function stack? I see that the saved rbp is the same with saved rsp , so that when interruptHanler is call, it change the local in my function |
Author: | Gigasoft [ Thu Sep 29, 2022 3:41 am ] |
Post subject: | Re: Crash in memmove function |
If you are using a compiler that uses the SystemV AMD64 ABI, such as GCC, you must remember to disable the red zone for code that runs in kernel mode (-mno-red-zone on GCC), because it will be overwritten on every interrupt. |
Author: | zungnguyen [ Thu Sep 29, 2022 9:51 am ] |
Post subject: | Re: Crash in memmove function |
Gigasoft wrote: If you are using a compiler that uses the SystemV AMD64 ABI, such as GCC, you must remember to disable the red zone for code that runs in kernel mode (-mno-red-zone on GCC), because it will be overwritten on every interrupt. Thank you. It works! |
Page 1 of 1 | All times are UTC - 6 hours |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |