https://bugzilla.redhat.com/show_bug.cgi?id=1460254
Nick Clifton nickc@redhat.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |MODIFIED Fixed In Version| |binutils-2.28-11.fc27 Doc Type|If docs needed, set a value |Bug Fix
--- Doc Text *updated* --- Cause:
The s390 assembler would emit fake local labels whose name is L0^A.
Consequence:
The presence of a control character (ASCII code 001) in a symbol name was confusing the golang build machinery.
Fix:
Stop the s390 assembler from emitting these symbols.
Result:
The golang build machinery works.
--- Comment #17 from Nick Clifton nickc@redhat.com --- Found it. The patch mentioned by Andreas on comment #12 was the clue. What happens is that the code added by the gas-comp-dir.patch generates fake local labels (whose name is .L0^A - but I had forgotten this), and then it expects the backend to convert these into section relative offsets. Most targets do this, but for some reason the s390 does not. (I believe that this is a snafu on the part of the s390 backend. There is no good reason not to convert these labels).
The patch from comment #12 had the side effect of fixing this bug, because it allows non-pc-relative symbols in the .debug_str section to be adjusted, and these fake local label just happen to match that criteria. But it does not fix the broader problem of ensuring that all fake local labels are converted. So I have added an extra patch to the rawhide binutils sources to do this, and I will also commit a patch to the FSF mainline sources as well.
Cheers Nick