From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/4411 Path: news.gmane.org!not-for-mail From: John Spencer Newsgroups: gmane.linux.lib.musl.general Subject: Re: mistake in powerpc clone.s? Date: Fri, 27 Dec 2013 02:57:30 +0100 Message-ID: <52BCDE8A.3060304@barfooze.de> References: <6CBC4CE2-CFF2-4FE6-8DD5-6FB2B1FCBA4A@mac.com> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit X-Trace: ger.gmane.org 1388109473 10756 80.91.229.3 (27 Dec 2013 01:57:53 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 27 Dec 2013 01:57:53 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-4415-gllmg-musl=m.gmane.org@lists.openwall.com Fri Dec 27 02:57:58 2013 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1VwMgY-0008W0-AK for gllmg-musl@plane.gmane.org; Fri, 27 Dec 2013 02:57:58 +0100 Original-Received: (qmail 29939 invoked by uid 550); 27 Dec 2013 01:57:57 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 29928 invoked from network); 27 Dec 2013 01:57:57 -0000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130801 Thunderbird/17.0.8 In-Reply-To: <6CBC4CE2-CFF2-4FE6-8DD5-6FB2B1FCBA4A@mac.com> Xref: news.gmane.org gmane.linux.lib.musl.general:4411 Archived-At: 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=, > path=, exec=0x1926b30 , fa > attr=, 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 > 0x01922e3c <+44>: neg r3,r3 > 0x01922e40 <+48>: cmpwi cr7,r3,0 > 0x01922e44 <+52>: bne- cr7,0x1922e5c > 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. > > >