strong_aliasって何?

glibcでのpthread実装コードにて、pthread_mutex_trylockを__pthread_mutex_trylockのエイリアスとして宣言しているっぽいのは一個下のエントリに出ているとおりなんですが、ここで使われているstrong_aliasとかいうマクロの件。

glibcのソースを落としてきてgrepしたらありました。

less -N include/libc-symbols.h

100 /* Define ALIASNAME as a strong alias for NAME.  */
101 # define strong_alias(name, aliasname) _strong_alias(name, aliasname)
102 # define _strong_alias(name, aliasname) \
103   extern __typeof (name) aliasname __attribute__ ((alias (#name)));
...
110 # ifdef HAVE_WEAK_SYMBOLS
111
112 /* Define ALIASNAME as a weak alias for NAME.
113    If weak aliases are not available, this defines a strong alias.  */
114 #  define weak_alias(name, aliasname) _weak_alias (name, aliasname)
115 #  define _weak_alias(name, aliasname) \
116   extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
117
118 /* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined).  */
119 #  define weak_extern(symbol) _weak_extern (weak symbol)
120 #  define _weak_extern(expr) _Pragma (#expr)
121
122 # else
123
124 #  define weak_alias(name, aliasname) strong_alias(name, aliasname)
125 #  define weak_extern(symbol) /* Nothing. */
126
127 # endif

とりあえずここまで。