GNU_IFUNC(GNU indirect function)とは同一の関数の複数の実装から、ロード時に最適な実装を選択する仕組みです1。通常、同一の関数の複数の実装が存在した場合、動的リンカ(ld-linux.so)が最初に見つけた実装が選択されますが、その選択するための基準を開発者が決定できるところに、この機能の意義があります。 GNU_IFUNCを使った簡単な例を以下に示します。resolve_foo で foo の実装が選択されていることがわかります。 > cat foo.c #include <stdio.h> extern void foo(); void foo_default() { printf("foo_default\n"); } void foo_1() { printf("foo_1\n"); } void foo_2() { printf("foo_2\n")