This brings back the original version of D81359.
I have found several use cases now.
- Unlike GNU ld, LLD's relocation processing is one pass. If we decide to optimize(relax) R_X86_64_{,REX_}GOTPCRELX, we will suppress GOT generation and cannot undo the decision later. Optimizing R_X86_64_REX_GOTPCRELX can usually make it easy to hit relocation R_X86_64_REX_GOTPCRELX out of range. Without --no-relax, the user has to recompile with -Wa,-mrelax-relocations=no.
- The option would help during my investigationg of the root cause of https://git.kernel.org/linus/09e43968db40c33a73e9ddbfd937f46d5c334924
- There is need for relaxation for AArch64 & RISC-V. Implementing this for x86-64 improves consistency with little target-specific cost (two-line X86_64.cpp change).
I'd probably change the wording a bit, either drop the second part ("This disables R_X86_64 ... ") or indicate that currently it works only for x86_64. I'm not really sure it's that useful, "Disable target-specific relaxations." seems to be sufficient and won't require frequent updates.