mailing list of musl libc
 help / color / mirror / code / Atom feed
From: John Spencer <maillist-musl@barfooze.de>
To: musl@lists.openwall.com
Subject: Re: mistake in powerpc clone.s?
Date: Fri, 27 Dec 2013 02:57:30 +0100	[thread overview]
Message-ID: <52BCDE8A.3060304@barfooze.de> (raw)
In-Reply-To: <6CBC4CE2-CFF2-4FE6-8DD5-6FB2B1FCBA4A@mac.com>

James Gregurich wrote:
> hi,
> 
> I was tracking down some odd behavior in the debugger that makes it at least appear as if a stack corruption has occurred. I followed it to clone.s.
> 
> 
> 
> could  the following be a mistake? Notice that r30 is stored to $r1 - 16 while it is restored to $r1 + 0.   When I step through this code in the debugger, once 'stwu 30, -16(1)’ is executed gdb claims the stack is corrupted…and this corruption persists up into my project code. I suspect the -16 should be a 0. Comments?
> 
> 
> 
> 
> 
> # store non-volatile regs r30, r31 on stack in order to put our
> # start func and its arg there
> stwu 30, -16(1)

stwu first updates r1 to r1 - 16, then stores into that address
this is equivalent to
subi 1,1,16
stw 30, 0(1)

the weird behaviour in gdb you're experiencing is probably because of 
the reentrant nature of the clone syscall.
there may still be bugs tho, but at least the pthread tests of the 
libc-testsuite worked correctly on ppc. however this arch was otherwise 
not widely tested so far (a full sabotage build a year ago was the 
biggest test so far).

what is the exact problem you're trying to fix ?

> stw 31, 4(1)
> 
> ...
> 
> # restore stack
> lwz 30, 0(1)
> lwz 31, 4(1)
> addi 1, 1, 16
> 
> blr
> 
> 
> 
> 
> gdb log:
> 
> 
> 
> 
> (gdb) bt   
> #0  0x01922e14 in clone ()
> #1  0x0191d364 in __posix_spawnx (
>     res=<unknown type in /root/test/SuperNodeDmx.elf.debug, CU 0x128482, DIE 0x1284b9>, 
>     path=<unknown type in /root/test/SuperNodeDmx.elf.debug, CU 0x128482, DIE 0x1284c8>, exec=0x1926b30 <execve>, fa 
>     attr=<unknown type in /root/test/SuperNodeDmx.elf.debug, CU 0x128482, DIE 0x1284f5>, argv=0xbffff7e8, envp=0xbff6
> Backtrace stopped: previous frame inner to this frame (corrupt stack?)
> (gdb) disass
> Dump of assembler code for function clone:
>    0x01922e10 <+0>:     stwu    r30,-16(r1)
> => 0x01922e14 <+4>:     stw     r31,4(r1)
>    0x01922e18 <+8>:     mr      r30,r3
>    0x01922e1c <+12>:    mr      r31,r6
>    0x01922e20 <+16>:    mr      r3,r5
>    0x01922e24 <+20>:    mr      r5,r7
>    0x01922e28 <+24>:    mr      r6,r8
>    0x01922e2c <+28>:    mr      r7,r9
>    0x01922e30 <+32>:    li      r0,120
>    0x01922e34 <+36>:    sc      
>    0x01922e38 <+40>:    bns+    0x1922e40 <clone+48>
>    0x01922e3c <+44>:    neg     r3,r3
>    0x01922e40 <+48>:    cmpwi   cr7,r3,0
>    0x01922e44 <+52>:    bne-    cr7,0x1922e5c <clone+76>
>    0x01922e48 <+56>:    mr      r3,r31
>    0x01922e4c <+60>:    mtctr   r30
>    0x01922e50 <+64>:    bctrl
>    0x01922e54 <+68>:    li      r0,1
>    0x01922e58 <+72>:    sc      
>    0x01922e5c <+76>:    lwz     r30,0(r1)
>    0x01922e60 <+80>:    lwz     r31,4(r1)
>    0x01922e64 <+84>:    addi    r1,r1,16
>    0x01922e68 <+88>:    blr
> End of assembler dump.
> 
> 
> 



  reply	other threads:[~2013-12-27  1:57 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-26 22:08 James Gregurich
2013-12-27  1:57 ` John Spencer [this message]
2013-12-27  3:13   ` James Gregurich
2013-12-27  3:42     ` Rich Felker
2013-12-27  3:45       ` James Gregurich
2013-12-27 22:34         ` James Gregurich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52BCDE8A.3060304@barfooze.de \
    --to=maillist-musl@barfooze.de \
    --cc=musl@lists.openwall.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).