This can't be committed until I modify llvm-objdump -t to print visibility properly for ELF symbols, but the lld bits should be all there, so this is ready for review.
I'll add an unit test once I'll figure out the llvm-objdump bits properly.
P.S. This also makes _GLOBAL_OFFSET_TABLE hidden by default. Probably should be committed separately.
This is very confusing, if you see line 771. We set binding for local symbols to be STB_LOCAL if scope is set to scopeTranslationUnit, so visibility would need to be set as STV_DEFAULT ? No ?