03/01/01 13:54.net
>>98
俺もあぬまり詳しくないけど。どういう目的かというと、ABI を保つためでしょう。例えば sys/times.h 中で、times(3) という関数は
__BEGIN_DECLS
#ifdef __LIBC12_SOURCE__
clock_t times __P((struct tms *));
#else
clock_t times __P((struct tms *)) __RENAME(__times13);
#endif
__END_DECLS
こういう風に宣言されています。ここで __LIBC12_SOURCE__ は旧版で、times(3) の ABI が変わった(?)ときに加わったのが __RENAME(__times13) の方。新しい環境で times(3) を使うと後者が適用されると思います。
で、__RENAME(__times13) とは、コンパイル時に、シンボル times を __times13 にすり替えるのだと思います。ここで、なんでかっていうのはうまく説明できませんけど、#define times __times13 じゃ整合がとれなくなったりするからでしょうか。__RENAME の振る舞いは
printf '#include <sys/cdefs.h>\n__RENAME(foo)\n' | cc -E - | tail -1
printf '#undef __ELF__\n#include <sys/cdefs.h>\n__RENAME(foo)\n' | cc -E - | tail -1
printf '#include <sys/times.h>\ntimes(foo)\n' | cc -E - | grep times
nm -g /usr/lib/libc.a | grep times
とかやれば分かるんじゃないでしょうか。(というか、わたしもすぐ分からなくなるから↑こんな風にしています。)