我试图将项目从Windows移植到Linux。 我在以下repo中托管代码:Nspire Emu。 我能够修复一些编译错误,但需要重新实现许多功能,并且有些部分我无法理解。
frame
变量类型定义:
typedef struct { void *prev, *function; } os_exception_frame_t;
一些内联汇编我不明白:
asm ("movl %%fs:(%1), %0" : "=r" (frame->prev) : "r" (0));
asm ("movl %0, %%fs:(%1)" : : "r" (frame), "r" (0));
如果有人能帮我理解以前的代码,我真的很感激。 提前谢谢。
答案 0 :(得分:1)
这个内联asm从结构化异常处理程序堆栈中弹出一个Windows异常处理程序框架。 Linux并不使用结构化异常处理程序,因此需要为linux删除此代码,并将其替换为完全不同的代码。这取决于代码通过操纵SEH堆栈试图实现的目的。 Linux中的等价物可能涉及注册一些信号处理程序。