https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63842 --- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> --- The proper code sequence should be pushq %r15 load GOT base into %r15 load address of puts PLT entry into %rdx call *(%rdx) popq %r15 That is similar to 32-bit.