In processRelocAux(), we handle errors before copy relocation/canonical PLT.
This makes error checking a bit complex because we have to check for
conditions that will be allowed by copy relocation/canonical PLT.
Instead, move copy relocation/canonical PLT before error checking. This
simplifies the previous clumsy error checking code
config->shared || (config->pie && expr == R_ABS && type != target->symbolicRel)
to the simple config->isPic. Some diagnostics can be reported in
different ways. The code motion changes diagnostics for some contrived
test cases:
- copy-rel-pie-error.s -> copy-rel-pie2.s: It was rejected before but accepted now. ld.bfd also accepts the case.
- copy-errors.s: "cannot preempt symbol" changes to "symbol 'bar' has no type"
- got32{,x}-i386.s: the suggestion changes from "-fPIC or -Wl,-z,notext" to "-fPIE"
- x86-64-dyn-rel-error5.s: one diagnostic changes for -pie case