[Bug 225321] dtrace/powerpc64: System crash

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Wed Feb 21 15:56:32 UTC 2018


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225321

--- Comment #4 from Breno Leitao <breno.leitao at gmail.com> ---
Hi,

I created a patch that I think it makes sense.

I think that the problem we are not using the temporary stack properly, since
it is defined on the bottom of the stack, as showed:

  #define TMPSTKSZ        16384           /* 16K temporary stack */
  GLOBAL(tmpstk)
          .space  TMPSTKSZ

  TOC_ENTRY(tmpstk)

So, the tmpstk is pointing to the bottom of the stack (higher address) in the
TOC.

Later, in the dbtrap: section, we get tmpstk and increase TMPSTKSZ, which is
going to get in a different area.

If the above is correct, we have two solutions:

1) Move the TOC_ENTRY to the TOP of the stack, something as (not validated):

  #define TMPSTKSZ        16384           /* 16K temporary stack */
  GLOBAL(tmpstk)
  TOC_ENTRY(tmpstk)
          .space  TMPSTKSZ


2) Does not increment the tmpstk pointer, since we are on the bottom of the
stack already:

 index 7ef41d90ffe..2307ec4307c 100644
 --- a/sys/powerpc/aim/trap_subr64.S
 +++ b/sys/powerpc/aim/trap_subr64.S
 @@ -805,9 +805,9 @@ dbtrap:
         andi.   %r1,%r1,0xff00
         mtsprg3 %r1

         ld      %r1,TRAP_TOCBASE(0)             /* get new SP */
         ld      %r1,TOC_REF(tmpstk)(%r1)
 -       addi    %r1,%r1,(TMPSTKSZ-48)
 +       addi    %r1,%r1,-48


Does it make any sense?

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-ppc mailing list