https://github.com/lattera/glibc/blob/master/include/libc-symbols.h から
/* Define ALIASNAME as a weak alias for NAME.
If weak aliases are not available, this defines a strong alias. */
# define weak_alias(name, aliasname) _weak_alias (name, aliasname)
# define _weak_alias(name, aliasname) \
extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
ウィークシンボルについて:
https://en.wikipedia.org/wiki/Weak_symbol
次のことを行うマクロです:
弱い関数を宣言します。その関数に強いシンボル名を指定しなかった場合、それを配置した関数を呼び出します。例えば
int _foo(){ return 1;}
//And weak alias
int __attribute__((weak, alias("_foo"))) foo();
したがって、foo の実際の実装を提供していない場合、基本的に _foo を使用して 1 を返します。