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: [CFT] kill darwin encode_section_info


On Tuesday, May 13, 2003, at 05:45 PM, Dale Johannesen wrote:
On Monday, May 12, 2003, at 09:55 PM, Andreas Tobler wrote:
Richard Henderson wrote:

On Tue, May 13, 2003 at 06:47:07AM +0200, Andreas Tobler wrote:
../../gcc/gcc/libgcc2.c:1254: internal compiler error: Bus error
Please submit a full bug report,
Well, this doesn't fail via a cross compiler.  No idea
what you can give me to debug this further.  :-(

Forgot to add the config:
../gcc/configure --prefix=/var/tmp --enable-languages=c,c++,java --disable-multilib


Threads are posix. Otherwise a clean cvs tree.

I'll have a look at this. Getting rid of all that Very Wrong frobbing is
a big service to the Darwin folks; nobody else has been able to do it.

The problem is that rs6000_emit_prologue is called with regs_ever_live[R31]
(the PIC register) ==0, but there is a use of R31 in the RTL, used to load
a floating point constant [below]. I don't know why that happens but I've
seen it before, and I expect there's a good reason it was using current_function_uses_pic_offset_table instead. I see that several other ports
also use it. So why not? Perhaps this is a clue to the problem (although
this routine isn't called on Darwin, maybe something like this is needed if
the 'second flow pass' problem has been fixed):


struct rtx_def *
rs6000_got_register (value)
rtx value ATTRIBUTE_UNUSED;
{
/* The second flow pass currently (June 1999) can't update
regs_ever_live without disturbing other parts of the compiler, so
update it here to make the prolog/epilogue code happy. */
if (no_new_pseudos && ! regs_ever_live[RS6000_PIC_OFFSET_TABLE_REGNUM])
regs_ever_live[RS6000_PIC_OFFSET_TABLE_REGNUM] = 1;


current_function_uses_pic_offset_table = 1;

  return pic_offset_table_rtx;
}

(insn 60 57 61 0 0x0 (set (reg:SI 9 r9)
        (plus:SI (reg:SI 31 r31)
            (high:SI (const:SI (unspec:SI [
                            (symbol_ref/u:SI ("*LC0") [flags 0x2])
                        ] 11))))) 300 {macho_high_plus} (nil)
    (nil))

(insn 61 60 58 0 0x0 (set (reg:SI 9 r9)
        (lo_sum:SI (reg:SI 9 r9)
            (const:SI (unspec:SI [
                        (symbol_ref/u:SI ("*LC0") [flags 0x2])
                    ] 11)))) 301 {macho_low} (nil)
    (nil))

(insn 58 61 47 0 0x0 (set (reg:DF 32 f0 [123])
(mem/u/f:DF (reg:SI 9 r9) [4 S8 A64])) 315 {*movdf_hardfloat32} (nil)
(expr_list:REG_EQUIV (const_double:DF -2147482624 [0x80000400] 4.50360177485\
4144e+15 [0x0.800004p+53])
(nil)))



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