I noticed, while looking at some generated code on godbolt, that something changed in function calls between stable (1.30) and beta (1.31), and I was wondering if that was a deliberate change and if yes, where I could read about it.
The difference is that with stable, function calls look like:
call example::foo@PLT
while in beta, they look like:
call qword ptr [rip + example::foo@GOTPCREL]
A notable difference between the two is that in the former case, the symbol resolution will happen at first-call time (except when linked with bindnow), while in the second, it will happen at startup.
Interestingly, while this changed on x86-64, this didn’t change on x86.