bootstrap failed during 'make check'

Joern RENNECKE joern.rennecke@st.com
Wed Jul 5 17:48:00 GMT 2006


Joern Rennecke wrote:

> Eric Botcazou wrote:
>
>>> make[3]: Leaving directory `/mnt/scratch/nightly/2006-07-04/i686'
>>> Comparing stages 2 and 3
>>> warning: ./cc1-checksum.o differs
>>> warning: ./cc1plus-checksum.o differs
>>> warning: ./cc1obj-checksum.o differs
>>> Bootstrap comparison failure!
>>>   
>>
>>
>> Does the attached patch make any difference?
>>  
>>
> No, I still get the same set of .o files that differ, and the 
> -fdump-noaddr
> (See PR other/28251)  peephole2 dump for cfg.c compiled with stage1 / 
> stage2 cc1
> is still the same.

Hmm, as far as I can tell, stage1 i386.c:ix86_split_ashr has been 
miscompiled by gcc (GCC) 3.2.3 20030502 (Red Hat Linux 3.2.3-54).

config/i386/i386.c" lines  12307 .. 12309 are:
          emit_insn ((mode == DImode
                      ? gen_x86_shrd_1
                      : gen_x86_64_shrd) (low[0], high[0], GEN_INT 
(count)));
and this has been compiled as:

0x088af608 <ix86_split_ashr+486>:       sub    $0xc,%esp
0x088af60b <ix86_split_ashr+489>:       sub    $0xc,%esp
0x088af60e <ix86_split_ashr+492>:       pushl  0xffffffec(%ebp)
0x088af611 <ix86_split_ashr+495>:       push   $0x0
0x088af613 <ix86_split_ashr+497>:       call   0x8468f42 <gen_rtx_CONST_INT>
0x088af618 <ix86_split_ashr+502>:       add    $0x14,%esp
0x088af61b <ix86_split_ashr+505>:       mov    $0x88969da,%edx     /* 
gen_x86_64_shrd */
0x088af620 <ix86_split_ashr+510>:       sub    $0x8,%esp
0x088af623 <ix86_split_ashr+513>:       push   %eax
0x088af624 <ix86_split_ashr+514>:       pushl  0xfffffff0(%ebp)
0x088af627 <ix86_split_ashr+517>:       pushl  0xfffffff8(%ebp)
0x088af62a <ix86_split_ashr+520>:       call   *%edx
0x088af62c <ix86_split_ashr+522>:       add    $0x14,%esp
0x088af62f <ix86_split_ashr+525>:       push   %eax
0x088af630 <ix86_split_ashr+526>:       call   0x84710dd <emit_insn>
0x088af635 <ix86_split_ashr+531>:       add    $0x10,%esp

I.e. we are always calling gen_x86_64_shrd no matter what the value of 
mode is.
stepping in gdb also shows that we end up in gen_x86_64_shrd in the 
stage1 compiler,
but in gen_x86_shrd_1 in the stage2 compiler (mode is DImode).

So it seems I have to abandom the system compiler for doing bootstraps.






More information about the Gcc mailing list