# cat putcharlib.c void pingpong(int (*f)(int)) { (*f)('a'); } # cat putchar.c #include void pingpong(int (*f)(int)); int main(int argc, char* argv[]) { pingpong(putchar); return (0); } # cc -m32 -fuse-ld=/opt/llvm/bin/ld.lld -shared -fPIC -o ./putcharlib.so putcharlib.c # cc -m32 -fuse-ld=/opt/llvm/bin/ld.lld -o putchar_lld putchar.c ./putcharlib.so # cc -m32 -fuse-ld=/usr/local/bin/ld.bfd -o putchar_bfd putchar.c ./putcharlib.so # ./putchar_lld Illegal instruction (core dumped) # ./putchar_bfd a# #