public inbox for glibc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libc/357] New: getcontext() on ppc32 destroys saved parameter 1 in caller's frame
@ 2004-08-30 20:20 qboosh at pld-linux dot org
  2004-08-30 23:22 ` [Bug libc/357] " sjmunroe at us dot ibm dot com
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: qboosh at pld-linux dot org @ 2004-08-30 20:20 UTC (permalink / raw)
  To: glibc-bugs

GLIBC_2.3.4 getcontext() on ppc32 changes the value of the first
parameter passed to caller's function.
Testcase:

$ cat tst_getcontext.c
#include <ucontext.h>

void test(volatile int a, volatile int b)
{
        ucontext_t uc;
        printf("before: %d %d\n", a, b);
        getcontext(&uc);
        printf("after : %d %d\n", a, b);
}

int main()
{
        test(1, 2);
}
$ ./tst_getcontext
before: 1 2
after : 2147478448 2

("volatile" is not needed when tst_getcontext is compiled without any
optimization)

It's caused by the first instruction of __getcontext()
(sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S:29):

ENTRY(__getcontext)
        stw     r3,_FRAME_PARM_SAVE1(r1)

__getcontext doesn't have its own stack frame, so it uses caller's
stack frame, thus destroying it...

The same applies to GLIBC_2.3.4 swapcontext(), but it may be less/not(?)
harmful as successful swapcontext() never returns.

-- 
           Summary: getcontext() on ppc32 destroys saved parameter 1 in
                    caller's frame
           Product: glibc
           Version: unspecified
            Status: NEW
          Severity: normal
          Priority: P2
         Component: libc
        AssignedTo: gotom at debian dot or dot jp
        ReportedBy: qboosh at pld-linux dot org
                CC: glibc-bugs at sources dot redhat dot com
  GCC host triplet: ppc-linux


http://sources.redhat.com/bugzilla/show_bug.cgi?id=357

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2004-09-03  8:09 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-08-30 20:20 [Bug libc/357] New: getcontext() on ppc32 destroys saved parameter 1 in caller's frame qboosh at pld-linux dot org
2004-08-30 23:22 ` [Bug libc/357] " sjmunroe at us dot ibm dot com
2004-08-31  6:24 ` aj at suse dot de
2004-08-31 21:07 ` qboosh at pld-linux dot org
2004-09-02 18:44 ` sjmunroe at us dot ibm dot com
2004-09-03  8:09 ` jakub at redhat dot com

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 read-only IMAP folder(s) and NNTP newsgroup(s).