symb. link do ~
Stanislav Meduna
stano-cznews na meduna.org
Sobota Leden 5 10:47:11 CET 2002
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:
% cat foo.c
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
main()
{
struct stat buf;
stat("foo", &buf);
}
% gcc -c foo.c
% nm foo.o
00000000 t gcc2_compiled.
00000000 T main
U stat
ale vo vysledku uz hej:
% gcc foo.c
% nm a.out | grep stat\$
0804847c T __stat
0804847c W stat
takze sa zda, ze sa o to postara az linker (nechce sa mi patrat,
odkial tie syscally vezme).
Vie niekto, preco je to robene prave takto? Pokial by sa ten
syscall inlinoval uz v .o, usetrilo by sa jedno volanie
(na druhej strane si viem predstavit, ze aj sucasne spravanie
je niekedy potrebne).
<SPECULATION>
Ale zda sa, ze stat je weak symbol - mozno by s tym predsa len
islo nieco robit aj bez zasahu do jadra. A pre vyslovene hardcore
zasahy by mozno slo aj nieco na sposob:
% objcopy --weaken-symbol=__stat a.out a1.out
% nm a1.out | grep stat\$
0804847c W __stat
0804847c W stat
ale to uz je asi blbost, ked je to raz zlinkovane, tak je to
zlinkovane. Tu uz zial moje znalosti koncia a iba spekulujem -
ozve sa niekto znalejsi?
</SPECULATION>
Zdravi
--
Stano
Další informace o konferenci Linux