diff --git a/repos/dde_linux/src/lib/usb/include/spec/x86_64/platform/platform.h b/repos/dde_linux/src/lib/usb/include/spec/x86_64/platform/platform.h index e2f477a592..77fe1601f7 100644 --- a/repos/dde_linux/src/lib/usb/include/spec/x86_64/platform/platform.h +++ b/repos/dde_linux/src/lib/usb/include/spec/x86_64/platform/platform.h @@ -20,11 +20,15 @@ static inline void platform_execute(void *sp, void *func, void *arg) { - asm volatile ("movq %2, %%rdi;" - "movq %1, 0(%0);" - "movq %0, %%rsp;" - "call *0(%%rsp);" - : "+r" (sp), "+r" (func), "+r" (arg) : : "memory"); + asm volatile ("movq %0, %%rsp;" /* load stack pointer */ + "movq %%rsp, %%rbp;" /* caller stack frame (for GDB debugging) */ + "movq %0, -8(%%rbp);" + "movq %1, -16(%%rbp);" + "movq %2, -24(%%rbp);" + "sub $24, %%rsp;" /* adjust to next stack frame */ + "movq %2, %%rdi;" /* 1st argument */ + "call *-16(%%rbp);" /* call func */ + : : "r" (sp), "r" (func), "r" (arg)); } #endif /* _X86_64__PLATFORM_H_ */ diff --git a/repos/dde_linux/src/lib/wifi/include/spec/x86_64/platform/platform.h b/repos/dde_linux/src/lib/wifi/include/spec/x86_64/platform/platform.h index 13a367d20d..f31b722572 100644 --- a/repos/dde_linux/src/lib/wifi/include/spec/x86_64/platform/platform.h +++ b/repos/dde_linux/src/lib/wifi/include/spec/x86_64/platform/platform.h @@ -19,11 +19,15 @@ static inline void platform_execute(void *sp, void *func, void *arg) { - asm volatile ("movq %2, %%rdi;" - "movq %1, 0(%0);" - "movq %0, %%rsp;" - "call *0(%%rsp);" - : "+r" (sp), "+r" (func), "+r" (arg) : : "memory"); + asm volatile ("movq %0, %%rsp;" /* load stack pointer */ + "movq %%rsp, %%rbp;" /* caller stack frame (for GDB debugging) */ + "movq %0, -8(%%rbp);" + "movq %1, -16(%%rbp);" + "movq %2, -24(%%rbp);" + "sub $24, %%rsp;" /* adjust to next stack frame */ + "movq %2, %%rdi;" /* 1st argument */ + "call *-16(%%rbp);" /* call func */ + : : "r" (sp), "r" (func), "r" (arg)); } #endif /* _X86_64__PLATFORM_H_ */