diff --git a/repos/dde_bsd/src/lib/audio/include/spec/x86_32/platform/platform.h b/repos/dde_bsd/src/lib/audio/include/spec/x86_32/platform/platform.h index c120583b7..04affd839 100644 --- a/repos/dde_bsd/src/lib/audio/include/spec/x86_32/platform/platform.h +++ b/repos/dde_bsd/src/lib/audio/include/spec/x86_32/platform/platform.h @@ -36,6 +36,7 @@ void platform_execute(void *sp, void *func, void *arg) asm volatile ("movl %2, 0(%0);" "movl %1, -0x4(%0);" "movl %0, %%esp;" + "xorl %%ebp, %%ebp;" /* clear frame pointer */ "call *-4(%%esp);" : : "r" (sp), "r" (func), "r" (arg)); } diff --git a/repos/dde_bsd/src/lib/audio/include/spec/x86_64/platform/platform.h b/repos/dde_bsd/src/lib/audio/include/spec/x86_64/platform/platform.h index c407d94e1..6c6d895b9 100644 --- a/repos/dde_bsd/src/lib/audio/include/spec/x86_64/platform/platform.h +++ b/repos/dde_bsd/src/lib/audio/include/spec/x86_64/platform/platform.h @@ -34,11 +34,15 @@ int _setjmp(jmp_buf); 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_ */