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

Discussion in 'WASM.UNIX' started by zukalo, Sep 29, 2009.

  1. zukalo

    zukalo New Member

    Blog Posts:
    0
    Joined:
    Oct 22, 2008
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Jul 15, 2004
    Messages:
    489
    Location:
    Крыжёпполь
    -fomit-frame-pointer

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

    zukalo New Member

    Blog Posts:
    0
    Joined:
    Oct 22, 2008
    Messages:
    20
    Это не то! -fomit-frame-pointer убирает сохранение ebp, а меня интересует именно конструкция:
    push%esi
    push %edi
    push %ebх
     
  4. qqwe

    qqwe New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2009
    Messages:
    2,914
    оптимизация по скорости. активно используются регистры. соответственно сохранятся вначале
     
  5. zukalo

    zukalo New Member

    Blog Posts:
    0
    Joined:
    Oct 22, 2008
    Messages:
    20
    Спасибо, это понятно. Но дело в том, что ebx, например, мало где используется и толку от его сохранения 0.