symb. link do ~

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Neděle Leden 6 16:56:08 CET 2002


On Sat, 5 Jan 2002, Stanislav Meduna wrote:

> On Fri, 4 Jan 2002 21:12:35 +0000 (UTC), Jirka Kosina wrote:
> 
> : stat() neni funkce z libc, ale syscall.
> 
> Hmm, ako to vlastne funguje? Lebo v .o to este expandovane nie je:

stat() je samozrejme funkce z libc, ktera nasledne vola prislusny syscall
(od ktereho AFAIK uz existuji nejmene dve varianty...mozna dokonce i tri).

Tedy lepe receno je v glibc funkce __stat(), ktera je normalne pouzivana
pres weak alias stat(). Podobny trik je pouzit u vetsiny syscall wrapperu.
Mozna je za tim snaha umoznit zaroven stat() predefinovat a zaroven se
dostat k jeho puvodni definici, je-li toho zapotrebi -- mam takovy dojem, 
ze toho obcas (vy|zne)uziva samotne glibc.

Aby to bylo jeste zajimavejsi, tak aspon nektere verze glibc mely
stat() linkovany staticky (z /usr/lib/libc_static.a nebo tak nejak)
a stat() pak volal ruzne divne funkce jmenem _xstat() nebo nejak podobne.
To zase byla zrejme snaha se adaptovat na zmeny rozhrani. Ale snad to byla
jen prechodna faze.

> Vie niekto, preco je to robene prave takto? Pokial by sa ten
> syscall inlinoval uz v .o, usetrilo by sa jedno volanie

To by se sice usetrilo, ale volani syscallu ma myslim dost dalsich
rezijnich nakladu na to, aby se takova uspora v beznem programu moc
zasadne neprojevila.

V kazdem pripade bych na predefinovani stat() pres LD_PRELOAD moc nesazel.
Spis by byl lepsi "utok" na urovni syscallu -- coz lze ale take udelat bez
zasahu do jadra pomoci ptrace().

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."




Další informace o konferenci Linux