Дальний вызов кодового сегмента на x86
Я пытаюсь выполнить дальний вызов от задачи с сегментированным кодом сегмента, плоским сегментом данных и уровнем привилегий кольца 0 до другого сегмента кода с таким же уровнем привилегий со смещением ноль, но я получаю ошибку GP.
Как я делаю дальний звонок:
__asm__ volatile ("lcall *%0" :: "m" (ptr));
где ptr является переменной следующих данных (far_ptr_t):
typedef struct {
void* offset;
uint16_t sel;
} __attribute__((packed)) far_ptr_t;
Когда я отлаживаю это, я вижу, что это терпит неудачу на инструкции вызова, есть ли какая-то причина, которую я должен рассмотреть, чтобы знать, почему я получаю ошибку GP?