[PATCH] convert braced initializers to strings (PR 71625)

Jeff Law law@redhat.com
Wed Aug 15 21:34:00 GMT 2018


On 08/15/2018 03:02 PM, Martin Sebor wrote:
> On 08/15/2018 06:07 AM, Joseph Myers wrote:
>> On Tue, 14 Aug 2018, Martin Sebor wrote:
>>
>>>> This is with Bison 3.0.4, should the version used to produce
>>>> intl/plural.c
>>>> prove relevant.
>>>
>>> Can you send me the translation unit and the options it was compiled
>>> with that triggered the errors?
>>
>> I've attached plural.i.  The error is a static link error linking sln,
>> but
>> maybe comparing results of compiling plural.i before and after the
>> changes
>> may be enlightening (unless it's actually a difference in code elsewhere
>> in glibc causing a link error reported in plural.o).
>>
>> Compiled with:
>>
>> alpha-glibc-linux-gnu-gcc
>> /scratch/jmyers/glibc/many9/build/compilers/alpha-linux-gnu/glibc/alpha-linux-gnu/intl/plural.c
>>
>> -c -std=gnu11 -fgnu89-inline  -O2 -Wall -Werror -Wundef -Wwrite-strings
>> -fmerge-all-constants -fno-stack-protector -frounding-math -g
>> -Wstrict-prototypes -Wold-style-definition -fno-math-errno
>> -mlong-double-128 -mieee -mfp-rounding-mode=d    
>> -ftls-model=initial-exec
>> -I../include
>> -I/scratch/jmyers/glibc/many9/build/compilers/alpha-linux-gnu/glibc/alpha-linux-gnu/intl
>>
>> -I/scratch/jmyers/glibc/many9/build/compilers/alpha-linux-gnu/glibc/alpha-linux-gnu
>>
>> -I../sysdeps/unix/sysv/linux/alpha/alpha
>> -I../sysdeps/unix/sysv/linux/alpha/fpu  -I../sysdeps/alpha/fpu
>> -I../sysdeps/unix/sysv/linux/alpha  -I../sysdeps/alpha/nptl
>> -I../sysdeps/unix/sysv/linux/wordsize-64 
>> -I../sysdeps/ieee754/ldbl-64-128
>> -I../sysdeps/ieee754/ldbl-opt  -I../sysdeps/unix/sysv/linux/include
>> -I../sysdeps/unix/sysv/linux  -I../sysdeps/nptl  -I../sysdeps/pthread
>> -I../sysdeps/gnu  -I../sysdeps/unix/inet  -I../sysdeps/unix/sysv
>> -I../sysdeps/unix/alpha  -I../sysdeps/unix  -I../sysdeps/posix
>> -I../sysdeps/alpha  -I../sysdeps/wordsize-64
>> -I../sysdeps/ieee754/ldbl-128  -I../sysdeps/ieee754/dbl-64/wordsize-64
>> -I../sysdeps/ieee754/dbl-64  -I../sysdeps/ieee754/flt-32
>> -I../sysdeps/ieee754  -I../sysdeps/generic  -I.. -I../libio -I.
>> -D_LIBC_REENTRANT -include
>> /scratch/jmyers/glibc/many9/build/compilers/alpha-linux-gnu/glibc/alpha-linux-gnu/libc-modules.h
>>
>> -DMODULE_NAME=libc -include ../include/libc-symbols.h
>> -DTOP_NAMESPACE=glibc -D'LOCALEDIR="/usr/share/locale"'
>> -D'LOCALE_ALIAS_PATH="/usr/share/locale"' -o
>> /scratch/jmyers/glibc/many9/build/compilers/alpha-linux-gnu/glibc/alpha-linux-gnu/intl/plural.o
>>
>> -MD -MP -MF
>> /scratch/jmyers/glibc/many9/build/compilers/alpha-linux-gnu/glibc/alpha-linux-gnu/intl/plural.o.dt
>>
>> -MT
>> /scratch/jmyers/glibc/many9/build/compilers/alpha-linux-gnu/glibc/alpha-linux-gnu/intl/plural.o
>>
>>
> 
> Thanks.  I don't see anything obviously wrong but I don't know
> much about Alpha assembly.  Attached are the two .s files, with
> (plural-new.s) and without (plural-old.s) the array-to-string
> transformation.
I'd focus on these  insns which correspond to the error from the linker:

They're in plural.o within the fucntion gettextparse


        ldah $2,yypgoto+2305843009213693936($29)                !gprelhigh

Something certainly doesn't look right...

At the .o level this turns into:
218:   00 00 5d 24     ldah    t1,0(gp)
                        218: GPRELHIGH  .sdata+0x1ffffffffffffff3


300:   00 00 5d 24     ldah    t1,0(gp)
                        300: GPRELHIGH  .sdata+0x1ffffffffffffff3

It's not really a matter of what the instruction does, but a matter of
the relocation.  You'd have to look at the definition of GPRELHIGH which
you can find in BFD.


Jeff



More information about the Gcc-patches mailing list