gcc удаляет встроенный ассемблерный код

Кажется, что gcc 4.6.2 удаляет код, который он считает неиспользуемым, из функций.

test.c

int main(void) {
  goto exit;
  handler:
    __asm__ __volatile__("jmp 0x0");
  exit:
  return 0;
}

Разборка main()

   0x08048404 <+0>:     push   ebp
   0x08048405 <+1>:     mov    ebp,esp
   0x08048407 <+3>:     nop    # <-- This is all whats left of my jmp.
   0x08048408 <+4>:     mov    eax,0x0
   0x0804840d <+9>:     pop    ebp
   0x0804840e <+10>:    ret

Параметры компилятора

Оптимизации не включены, только gcc -m32 -o test test.c( - m32, потому что у меня 64-битная машина).

Как остановить такое поведение?

Редактировать: Предпочтительно использовать параметры компилятора, а не изменять код.

17
задан Michael Petch 12 February 2018 в 22:46
поделиться