Anunţ

Caută printre mesajele de pe forum înainte de a scrie unul nou!
Formulează corect întrebarea sau problema pe care o ai.
Respectă regulile forumului și Codul de Conduită!

#1 15 Jun 2016 11:50:18

bula20
Membru
Înregistrat: 18 Jan 2016
Mesaje: 498

Pointeri de stiva

Am compilat un kernel fara pointeri de stiva :
Si rezultatul arata asa:
$objdump -d r8169.ko
0000000000000000 <init_module>:
   0:    48 c7 c2 00 00 00 00     mov    $0x0,%rdx
   7:    48 c7 c6 00 00 00 00     mov    $0x0,%rsi
   e:    48 c7 c7 00 00 00 00     mov    $0x0,%rdi
  15:    e9 00 00 00 00           jmpq   1a <__warned.59592+0x17>
Iar cu pointerii de stiva arata asa:
$$objdump -d r8169.ko
0000000000000000 <init_module>:
   0:    55                       push   %rbp
   1:    48 c7 c2 00 00 00 00     mov    $0x0,%rdx
   8:    48 c7 c6 00 00 00 00     mov    $0x0,%rsi
   f:    48 89 e5                 mov    %rsp,%rbp
  12:    48 c7 c7 00 00 00 00     mov    $0x0,%rdi
  19:    e8 00 00 00 00           callq  1e <init_module+0x1e>
  1e:    5d                       pop    %rbp
  1f:    c3                       retq

Aici este problema eu as dorii sa aiba un aspect intermediar:
$$objdump -d r8169.ko
0000000000000000 <init_module>:
   0:    55                       push   %rbp
   1:    48 c7 c2 00 00 00 00     mov    $0x0,%rdx
   8:    48 c7 c6 00 00 00 00     mov    $0x0,%rsi
  12:    48 c7 c7 00 00 00 00     mov    $0x0,%rdi
  19:    e8 00 00 00 00           callq  1e <init_module+0x1e>
  1e:    5d                       pop    %rbp
  1f:    c3                       retq
mai pe romineste sa nu mai mute din pointerul de stiva in pointerul baza( f:    48 89 e5                 mov    %rsp,%rbp)

Ce optiune trebuie sa bag in compilator?


Procesor:GenuineIntel ,Intel(R) Atom(TM) CPU  230   @ 1.60GHz, placa video intel G945,
2GB ram, 160GB hdd.

Offline

 

#2 15 Jun 2016 20:28:34

geosoft1
Membru
Locaţie: Râmnicu Vâlcea
Înregistrat: 21 Sep 2009
Mesaje: 3735

Re: Pointeri de stiva

acolo ai un apel standard de procedura. ce spui tu functioneaza numai daca nu folosesti stiva in procedura pentru ca atunci vei avea probleme cu adresarea relativa a parametrilor locali de pe stiva (ex bp+6 ?). din acest motiv cadrul de stiva trebuie sa fie local procedurii (mov %rsp,%rbp).

Editat ultima oară de geosoft1 (15 Jun 2016 20:35:33)


Daca raspunsul nu te multumeste, probabil nu ai pus intrebarea potrivita.
Registered linux user #542751

Offline

 

#3 16 Jun 2016 01:03:07

bula20
Membru
Înregistrat: 18 Jan 2016
Mesaje: 498

Re: Pointeri de stiva

Nu inteleg ce spui.Primele doua variante se realizeaza usor din compilator , pe mine ma interesa o optiune sa obtin a treia varianta.Este vorba de directiva

Cod:

KBUILD_CFLAGS   += -fomit-frame-pointer

Care reduce linii de asamblare , ce vroiam eu era o directiva care sa produca ceva intermediar, probabil ca ramin la aceasta varianta de optimizare daca nu gasesc altceva.
Ideea era urmatoarea  fiecare functie de kernel mutarea asta din stack pointer in base pointer i-mi lua intre 16 si 100 cicluri de procesor sa nu -fomit-frame-pointer nt in medie 4000-5000 de module si de functii mult mai multe  obtine o economie de spatiu si de timp de procesor destul de mare.

Editat ultima oară de bula20 (16 Jun 2016 11:11:12)


Procesor:GenuineIntel ,Intel(R) Atom(TM) CPU  230   @ 1.60GHz, placa video intel G945,
2GB ram, 160GB hdd.

Offline

 
Feed

Antet forum

Powered by FluxBB