From: Andreas Schwab <schwab@redhat.com>
To: libc-hacker@sourceware.org
Subject: [PATCH] Fix use of ucontext_t objects in tst-makecontext3
Date: Mon, 12 Apr 2010 16:56:00 -0000 [thread overview]
Message-ID: <m3ochopqxp.fsf@hase.home> (raw)
Objects of type ucontext_t cannot be copied, only getcontext can
properly initialize them. For example, on powerpc the structure
contains a pointer into itself, so makecontext modifies the original
object by side effect.
Andreas.
2010-04-12 Andreas Schwab <schwab@redhat.com>
* stdlib/tst-makecontext3.c (main): Initialize ucontext_t objects
only with getcontext. Test for unimplemented makecontext by
checking errno.
---
stdlib/tst-makecontext3.c | 62 ++++++++++++++++++++++++---------------------
1 files changed, 33 insertions(+), 29 deletions(-)
diff --git a/stdlib/tst-makecontext3.c b/stdlib/tst-makecontext3.c
index f127c6a..a44169a 100644
--- a/stdlib/tst-makecontext3.c
+++ b/stdlib/tst-makecontext3.c
@@ -136,38 +136,42 @@ main (void)
exit (1);
}
- ctx[1] = ctx[0];
+ if (getcontext (&ctx[1]) != 0)
+ {
+ printf ("%s: getcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+
ctx[1].uc_stack.ss_sp = st1;
ctx[1].uc_stack.ss_size = sizeof st1;
ctx[1].uc_link = &ctx[0];
- {
- ucontext_t tempctx = ctx[1];
- makecontext (&ctx[1], (void (*) (void)) f1, 33,
- 0x00000001 << flag, 0x00000004 << flag,
- 0x00000012 << flag, 0x00000048 << flag,
- 0x00000123 << flag, 0x0000048d << flag,
- 0x00001234 << flag, 0x000048d1 << flag,
- 0x00012345 << flag, 0x00048d15 << flag,
- 0x00123456 << flag, 0x0048d159 << flag,
- 0x01234567 << flag, 0x048d159e << flag,
- 0x12345678 << flag, 0x48d159e2 << flag,
- 0x23456789 << flag, 0x8d159e26 << flag,
- 0x3456789a << flag, 0xd159e26a << flag,
- 0x456789ab << flag, 0x159e26af << flag,
- 0x56789abc << flag, 0x59e26af3 << flag,
- 0x6789abcd << flag, 0x9e26af37 << flag,
- 0x789abcde << flag, 0xe26af37b << flag,
- 0x89abcdef << flag, 0x26af37bc << flag,
- 0x9abcdef0 << flag, 0x6af37bc3 << flag,
- 0xabcdef0f << flag);
-
- /* Without this check, a stub makecontext can make us spin forever. */
- if (memcmp (&tempctx, &ctx[1], sizeof ctx[1]) == 0)
- {
- puts ("makecontext was a no-op, presuming not implemented");
- return 0;
- }
- }
+ errno = 0;
+ makecontext (&ctx[1], (void (*) (void)) f1, 33,
+ 0x00000001 << flag, 0x00000004 << flag,
+ 0x00000012 << flag, 0x00000048 << flag,
+ 0x00000123 << flag, 0x0000048d << flag,
+ 0x00001234 << flag, 0x000048d1 << flag,
+ 0x00012345 << flag, 0x00048d15 << flag,
+ 0x00123456 << flag, 0x0048d159 << flag,
+ 0x01234567 << flag, 0x048d159e << flag,
+ 0x12345678 << flag, 0x48d159e2 << flag,
+ 0x23456789 << flag, 0x8d159e26 << flag,
+ 0x3456789a << flag, 0xd159e26a << flag,
+ 0x456789ab << flag, 0x159e26af << flag,
+ 0x56789abc << flag, 0x59e26af3 << flag,
+ 0x6789abcd << flag, 0x9e26af37 << flag,
+ 0x789abcde << flag, 0xe26af37b << flag,
+ 0x89abcdef << flag, 0x26af37bc << flag,
+ 0x9abcdef0 << flag, 0x6af37bc3 << flag,
+ 0xabcdef0f << flag);
+
+ /* Without this check, a stub makecontext can make us spin forever. */
+ if (errno == ENOSYS)
+ {
+ puts ("makecontext not implemented");
+ back_in_main = 1;
+ return 0;
+ }
/* Play some tricks with this context. */
if (++global == 1)
--
1.7.0.1
--
Andreas Schwab, schwab@redhat.com
GPG Key fingerprint = D4E8 DBE3 3813 BB5D FA84 5EC7 45C6 250E 6F00 984E
"And now for something completely different."
reply other threads:[~2010-04-12 16:56 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=m3ochopqxp.fsf@hase.home \
--to=schwab@redhat.com \
--cc=libc-hacker@sourceware.org \
/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.
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).