Currently we mark every shared symbol as STB_WEAK.
That is a hack to make it easy to decide when a .so is needed or not because of a reference to a given symbol.
That hack leaks when we create copy relocations as shown by the update to relocation-copy-alias.s.
This patch stores the original binding when we first read a shared symbol. We still have to update the binding to weak if we see a weak undef, but I find the logic easier to read where it is now.