[Bug target/29840] [4.3 Regression] build/genconditions ../../gcc/gcc/config/pa/pa.md > tmp-condmd.c: /bin/sh: 13354 Memory fault(coredump)

danglin at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Sat Nov 25 20:15:00 GMT 2006



------- Comment #3 from danglin at gcc dot gnu dot org  2006-11-25 20:15 -------
In print_c_condition, we have these two calls:

      print_rtx_ptr_loc (cond);
      printf ("(%s)", cond);

The generated assembly code is:

0x400000000000d4d0 <print_c_condition+216>:     ldd -40(ret1),r26
0x400000000000d4d4 <print_c_condition+220>:     ldo -30(sp),ret1
0x400000000000d4d8 <print_c_condition+224>:     b,l 0x400000000000d3b8
<print_rtx_ptr_loc>,rp
0x400000000000d4dc <print_c_condition+228>:     copy dp,r4
0x400000000000d4e0 <print_c_condition+232>:     ldd -40(ret1),r25
0x400000000000d4e4 <print_c_condition+236>:     copy r4,dp
0x400000000000d4e8 <print_c_condition+240>:     addil L%0,dp,r1
0x400000000000d4ec <print_c_condition+244>:     ldd 80(r1),r26
0x400000000000d4f0 <print_c_condition+248>:     ldo -30(sp),ret1
0x400000000000d4f4 <print_c_condition+252>:     b,l 0x400000000000d994
<.stub+60>,rp
0x400000000000d4f8 <print_c_condition+256>:     nop

The insn at 0x400000000000d4e0 is the problem.  Register ret1 is the argument
pointer.  It's call clobbered, so it must be saved and restored if an argument
(in this case cond) needs to be reloaded from the argument block on the stack.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29840



More information about the Gcc-bugs mailing list