-
1. Data: 2011-10-27 18:54:04
Temat: Co poeta miał na myśli
Od: Wojciech Muła <w...@p...null.onet.pl.invalid>
Przy jednym z haseł na Wikipedii pojawił się taki oto problem.
W dokumenacji gcc do flagi -fomit-frame-pointer piszą:
Don't keep the frame pointer in a register for functions that
don't need one. This avoids the instructions to save, set up
and restore frame pointers; it also makes an extra register
available in many functions. *It also makes debugging impossible
on some machines.*
Chodzi o ostanie zdanie. Dlaczego i na jakich architekturach
ma to znaczenie? Znacie jakieś przykłady.
w.
-
2. Data: 2011-10-27 21:04:45
Temat: Re: Co poeta miał na myśli
Od: Marek Borowski <m...@b...com>
On 27-10-2011 20:54, Wojciech Muła wrote:
> Przy jednym z haseł na Wikipedii pojawił się taki oto problem.
> W dokumenacji gcc do flagi -fomit-frame-pointer piszą:
>
> Don't keep the frame pointer in a register for functions that
> don't need one. This avoids the instructions to save, set up
> and restore frame pointers; it also makes an extra register
> available in many functions. *It also makes debugging impossible
> on some machines.*
>
> Chodzi o ostanie zdanie. Dlaczego i na jakich architekturach
> ma to znaczenie? Znacie jakieś przykłady.
>
> w.
>
Chodzi m.in. o x86. Jak jest frame pointer to latwo na stosie odnalesc
poprzednie wywolania.
Masz (uproszczony) stos:
FF: Frame pointer current ebp FF
FE: parm var
FD: parm var
FC: return address
FB: Frame pointer (points to FF) current ebp FB
FA: local var
F9: local var
F8: parm var
F7: parm var
F6: return address
F5: Frame pointer (points to FB) current ebp F5
A w ebp masz zawsze adress aktualnej ramki stosu, niezaleznie w ktorym
miejsciu zostanie podlaczony debugger zbudowanie stosu wywolan jest
trywialne.
Pozdrawiam
Marek