https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90813
--- Comment #13 from Segher Boessenkool <segher at gcc dot gnu.org> --- addis 9,2,.LC1@toc@ha ld 9,.LC1@toc@l(9) ... ld 9,0(9) ... ld 10,0(9) ... mtctr 10 ... bctrl .LC1: .quad __f_MOD_c_ So that symbol is dereferenced twice to get the address to jump to; and that gets 0. I can't read this Fortran so I don't know what is happening, either :-/