Пролог функции, добавляемый gcc

Тема в разделе "WASM.UNIX", создана пользователем zukalo, 29 сен 2009.

  1. zukalo

    zukalo New Member

    Публикаций:
    0
    Регистрация:
    22 окт 2008
    Сообщения:
    20
    Привык, что пролог выглядит как-то так (у меня старый Debian Sarge 3.1):
    push %ebp
    mov %ebp,%esp
    sub $0x..., %esp

    Недавно, собрав один модуль для apache, обнаружил, что в прологе всех его функций идёт сохранение регистров
    push%esi
    push %edi
    push %ebх,
    причём иногда %ebx вообще в функции не использовался! Оптимизация вроде по умолчанию была -O2.
    От чего ещё может зависеть пролог и зачем всё это сохранять?
     
  2. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    -fomit-frame-pointer

    http://gcc.gnu.org/onlinedocs/gcc-4.3.1/gcc/Optimize-Options.html
     
  3. zukalo

    zukalo New Member

    Публикаций:
    0
    Регистрация:
    22 окт 2008
    Сообщения:
    20
    Это не то! -fomit-frame-pointer убирает сохранение ebp, а меня интересует именно конструкция:
    push%esi
    push %edi
    push %ebх
     
  4. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    оптимизация по скорости. активно используются регистры. соответственно сохранятся вначале
     
  5. zukalo

    zukalo New Member

    Публикаций:
    0
    Регистрация:
    22 окт 2008
    Сообщения:
    20
    Спасибо, это понятно. Но дело в том, что ebx, например, мало где используется и толку от его сохранения 0.