The MIPSPro compiler is not happy with Parrot (it used to be though).
Everything is fine with gcc on the same system, which implies that some
nastiness has slipped in at some point.

I think it may have something to do with these warnings:

[gcc] ld32: WARNING 105: Common symbol "runops_cores" defined in
interpreter.o is resolved with a data definition in runops_cores.o
with a smaller alignment.

[MIPS] ld32: WARNING 15 : Multiply defined:(runops_cores) in interpreter.o and 
runops_cores.o (2nd definition ignored).

Playing with gdb gets me to:

[gcc]

97              core = runops_cores[which];
(gdb) print core
$1 = (opcode_t *(*)(struct Parrot_Interp *, opcode_t *)) 0x158
(gdb) print runops_cores
$2 = {0x10017ea0 <runops_t0p0b0_core>, 0x10017f48 <runops_t0p0b1_core>, 
  0x10018058 <runops_t0p1b0_core>, 0x10018160 <runops_t0p1b1_core>, 
  0x100182d0 <runops_t1p0b0_core>, 0x100183b8 <runops_t1p0b1_core>, 
  0x10018500 <runops_t1p1b0_core>, 0x10018648 <runops_t1p1b1_core>}
(gdb) n     
99              if ((interpreter->flags & PARROT_PROFILE_FLAG) != 0) {
(gdb) n
111             runops_generic(core, interpreter, pc);
(gdb) n
fact of 0 is: 1
....

[MIPS]

97              core = runops_cores[which];
(gdb) print core
$3 = (opcode_t *(*)()) 0
(gdb) n
99              if ((interpreter->flags & PARROT_PROFILE_FLAG) != 0) {
(gdb) print core
$4 = (opcode_t *(*)()) 0
(gdb) print runops_cores
$5 = {0, 0, 0, 0, 0, 0, 0, 0}
(gdb) print which
$6 = 0
(gdb) print runops_cores
$7 = {0, 0, 0, 0, 0, 0, 0, 0}
(gdb) n
111             runops_generic(core, interpreter, pc);
(gdb) n

Program received signal SIGSEGV, Segmentation fault.
0x0 in ?? ()

I'm getting tired now, so someone else can inherit this headache.

Alex Gough
-- 
Tomatoes make you happy.  Have you ever met a miserable
Italian?  They are irritating but never miserable.






Reply via email to