Я пытаюсь перенести проект из Windows в Linux. Я размещаю код в следующем репо: 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));
Я был бы очень признателен, если кто-то поможет мне понять предыдущий код. Спасибо заранее.
Компиляторы gcc и visual c имеют различный синтаксис для встроенной сборки. Я бы начал с документов из компилятора, в которых он работает правильно и переводится в формат, необходимый для вашего таргетинга. – Jay
Спасибо за подсказку. Это было скомпилировано в Linux с mingw gcc, это означает, что я могу скомпилировать код как в Windows, так и в Linux. Это не проблема для меня. Проблема заключается в фактическом значении этого фрагмента кода. Недавно я обнаружил, что fs: 0 - это где SEH происходит в Windows, и теперь я знаю, что делает этот код. См. Http://feepingcreature.github.io/handling.html Спасибо за время и терпение и извините за ответ на мой собственный вопрос. PD: Я не могу ответить из-за моей репутации. –