This fixes cases where the Go compiler created bss sections with a zero SizeOfRawData, with the size commnicated via the VirtualSize field.
GNU ld does pick up on and allocate section size based on VirtualSize in addition to SizeOfRawData.
See https://bugs.llvm.org/show_bug.cgi?id=49172 for the full backstory. I'm not entirely sure it's worthwhile doing (if this is the only case that happens to allocate bss sections differently, and it's getting fixed upstream there), and the fix looks overly generic like it could have a number of other unexpected side effects, but it doesn't at least trigger any change in any test case.