On 08/16/2018 09:23 AM, Martin Sebor wrote:
> On 08/15/2018 03:34 PM, Jeff Law wrote:
>> 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...
> 
> Thanks.  I also get the same exact same assembly with both
> forms of initializers for the two constant arrays, i.e.,
> 
>   static const yytype_int8 yypgoto[3] = "\366\366\377";
>   static const yytype_int8 yydefgoto[3] = "\377\005\006";
> 
> and
> 
>   static const yytype_int8 yypgoto[] = { -10, -10, -1 };
>   static const yytype_int8 yydefgoto[] = { -1, 5, 6 };
> 
> They end up in the .sdata section either way (the former
> both with and without the GCC change as might be expected):
> 
>         .section        .sdata,"aws"
>         .type   yydefgoto, @object
>         .size   yydefgoto, 3
>   yydefgoto:
>         .ascii  "\377\005\006"
>         .type   yypgoto, @object
>         .size   yypgoto, 3
>   yypgoto:
>         .ascii  "\366\366\377"
>         .section        .rodata
> 
> and also before the GCC change:
> 
>         .section        .sdata,"aws"
>         .type   yydefgoto, @object
>         .size   yydefgoto, 3
>   yydefgoto:
>         .byte   -1
>         .byte   5
>         .byte   6
>         .type   yypgoto, @object
>         .size   yypgoto, 3
>   yypgoto:
>         .byte   -10
>         .byte   -10
>         .byte   -1
> 
>> 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.
> 
> The definitions match the assembly with both kinds of
> initializers, and with the string literal also with GCC before
> the change:
> 
>   0000000000000218 GPRELHIGH         .sdata+0x1ffffffffffffff3
>   0000000000000238 GPRELLOW          .sdata+0x1ffffffffffffff3
>   0000000000000300 GPRELHIGH         .sdata+0x1ffffffffffffff3
>   0000000000000308 GPRELLOW          .sdata+0x1ffffffffffffff3
>   0000000000000458 GPRELHIGH         .sdata+0x0000000000000003
>   0000000000000468 GPRELLOW          .sdata+0x0000000000000003
> 
> vs the array form before the GCC change:
> 
>   0000000000000468 GPRELHIGH         .sdata+0x0000000000000003
>   0000000000000488 GPRELLOW          .sdata+0x0000000000000003
>   000000000000057c GPRELHIGH         .sdata
>   0000000000000580 GPRELLOW          .sdata
> 
> So it seems as though using the string literal as an initializer
> tickles a latent bug in GCC and the question is where.
I'd start working backwards from alpha_print_operand_address using a
cross compiler.  I'd also get a -dap dump and look at the actual address
in the insn that's emitting the offending ldah instructions.

Jeff

Reply via email to