This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Go patch committed: Rationalize external symbol names


On Thu, Jan 25, 2018 at 12:28 PM, Rainer Orth
<ro@cebitec.uni-bielefeld.de> wrote:
>
>> This patch to the Go frontend rationalizes the external symbol names
>> that appear in assembler code.  It changes from the ad hoc mechanisms
>> used to date to produce a set of names that are at least somewhat more
>> coherent.  They are also more readable, after applying a simple
>> demangling algorithms outlined in the long comment in names.cc.  The
>> new names use only ASCII alphanumeric characters, underscore, and dot
>> (which fixes AIX by avoiding the use of dollar sign).  If we really
>> had to we could replace dot with underscore at the cost of forbidding
>> some uses of underscore in Go identifier names.
>>
>> A minor cleanup discovered during this was that we were treating
>> function types as different if one had a NULL parameters_ field and
>> another has a non-NULL parameters_ field that has no parameters.  This
>> worked because we mangled them slightly differently.  We now mangle
>> them the same, so we treat them as equal, as we should anyhow.
>>
>> Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu.  Committed
>> to mainline.
>
> this patch almost certainly (i.e. I didn't reghunt, but it's the only
> plausible candidate between r257023 and r257057) Solaris/x86 bootstrap
> with /bin/as:
>
> Assembler: doc.go
>         "/var/tmp//ccbyjwCc.s", line 1043 : Syntax error
>         Near line: "    .globl  .1fmt.fmt.clearflags"
>         "/var/tmp//ccbyjwCc.s", line 1044 : Syntax error
>         Near line: "    .type   .1fmt.fmt.clearflags, @function"
>         "/var/tmp//ccbyjwCc.s", line 1045 : Illegal mnemonic
>         Near line: ".1fmt.fmt.clearflags:"
>         "/var/tmp//ccbyjwCc.s", line 1045 : Syntax error
>         Near line: ".1fmt.fmt.clearflags:"
>         "/var/tmp//ccbyjwCc.s", line 1045 : Syntax error
>         Near line: ".1fmt.fmt.clearflags:"
>         "/var/tmp//ccbyjwCc.s", line 1058 : Syntax error
>         Near line: "    .size   .1fmt.fmt.clearflags, .-.1fmt.fmt.clearflags"
>         "/var/tmp//ccbyjwCc.s", line 1060 : Syntax error
>         Near line: "    .globl  .1fmt.pp.Width"
>         "/var/tmp//ccbyjwCc.s", line 1061 : Syntax error
>         Near line: "    .type   .1fmt.pp.Width, @function"
>         "/var/tmp//ccbyjwCc.s", line 1062 : Illegal mnemonic
>         Near line: ".1fmt.pp.Width:"
>         "/var/tmp//ccbyjwCc.s", line 1062 : Syntax error
>         Near line: ".1fmt.pp.Width:"
>         "/var/tmp//ccbyjwCc.s", line 1062 : Syntax error
>         Near line: ".1fmt.pp.Width:"
>         "/var/tmp//ccbyjwCc.s", line 1082 : Syntax error
>         Near line: "    .size   .1fmt.pp.Width, .-.1fmt.pp.Width"
>         "/var/tmp//ccbyjwCc.s", line 1084 : Syntax error
>         Near line: "    .globl  .1fmt.pp.Precision"
>         "/var/tmp//ccbyjwCc.s", line 1085 : Syntax error
>         Near line: "    .type   .1fmt.pp.Precision, @function"
>         "/var/tmp//ccbyjwCc.s", line 1086 : Illegal mnemonic
>         Near line: ".1fmt.pp.Precision:"
>         "/var/tmp//ccbyjwCc.s", line 1086 : Syntax error
>         Near line: ".1fmt.pp.Precision:"
>         "/var/tmp//ccbyjwCc.s", line 1086 : Syntax error
>         Near line: ".1fmt.pp.Precision:"
>         "/var/tmp//ccbyjwCc.s", line 1106 : Syntax error
>         Near line: "    .size   .1fmt.pp.Precision, .-.1fmt.pp.Precision"
>         "/var/tmp//ccbyjwCc.s", line 1108 : Syntax error
>         Near line: "    .globl  .1fmt.ss.Width"
>         "/var/tmp//ccbyjwCc.s", line 1109 : Syntax error
>         Near line: "    .type   .1fmt.ss.Width, @function"
>         "/var/tmp//ccbyjwCc.s", line 1110 : Illegal mnemonic
>         Near line: ".1fmt.ss.Width:"
>         "/var/tmp//ccbyjwCc.s", line 1110 : Syntax error
>         Near line: ".1fmt.ss.Width:"
>         "/var/tmp//ccbyjwCc.s", line 1110 : Syntax error
>         Near line: ".1fmt.ss.Width:"
>         "/var/tmp//ccbyjwCc.s", line 1149 : Syntax error
>         Near line: "    .size   .1fmt.ss.Width, .-.1fmt.ss.Width"
>         "/var/tmp//ccbyjwCc.s", line 1151 : Syntax error
>         Near line: "    .globl  .1fmt.ss.UnreadRune"
>         "/var/tmp//ccbyjwCc.s", line 1152 : Syntax error
>         Near line: "    .type   .1fmt.ss.UnreadRune, @function"
>         "/var/tmp//ccbyjwCc.s", line 1153 : Illegal mnemonic
>         Near line: ".1fmt.ss.UnreadRune:"
>         "/var/tmp//ccbyjwCc.s", line 1153 : Syntax error
>         Near line: ".1fmt.ss.UnreadRune:"
>         "/var/tmp//ccbyjwCc.s", line 1153 : Syntax error
>         Near line: ".1fmt.ss.UnreadRune:"
>         "/var/tmp//ccbyjwCc.s", line 1209 : Syntax error
>         Near line: "    .size   .1fmt.ss.UnreadRune, .-.1fmt.ss.UnreadRune"
>         "/var/tmp//ccbyjwCc.s", line 1908 : Syntax error
>         Near line: "    .globl  .1fmt.fmt.init"
> Too many errors - Goodbye
> make[4]: *** [Makefile:3322: fmt.lo] Error 1
>
> Solaris/SPARC with /bin/as is fine, but that's not too astonishing since
> both assemblers are mostly different code bases.

>From the error messages I guess the problem is that the assembler
doesn't like symbols that start with ".1".  Do you know what names the
assembler permits?

Ian


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]