Главная

Создать правильный код.

Есть такой код.

void *hw[0xffff] = { …, func2, … };
long mem[0xffff];

void func2(long addr) __attribute__((regparm(1)));
void func2(long addr)
{
mem[addr] = 0;
}

void func1(long addr) __attribute__((regparm(1)));
void func1(long addr)
{
goto *hw[addr];
}

Проблема в том что компилятор создает следующий код

func1:
push ebx
… код для GOT
jmp … нужная часть

т.е. лишние 4 байта кладутся в стек, из за чего прога рушиться. Можно ли как то это исправить, может в новой версии gcc это исправят(та что доступна с haiku–os у меня падает с internal compiler error)

mingw в винде создает правильный код из одной строчи
jmp …

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <i> <img> <strong> <b> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Введите перечисленные символы, чтобы мы убедились, что вы не робот. Не требуется для зарегистрированных пользователей.
r
b
h
d
L
C
Enter the code without spaces and pay attention to upper/lower case.