18eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/* Test of correct simulation for uc->uc_link. */
28eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
38eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#include <assert.h>
48eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#include <stdio.h>
58eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#include <ucontext.h>
68eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
78eb8bab992e3998c33770b0cdb16059a8b918a06sewardjstatic void print_value(int value)
88eb8bab992e3998c33770b0cdb16059a8b918a06sewardj{
98eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   printf("Value is %d.\n", value);
108eb8bab992e3998c33770b0cdb16059a8b918a06sewardj}
118eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
128eb8bab992e3998c33770b0cdb16059a8b918a06sewardjint main(void)
138eb8bab992e3998c33770b0cdb16059a8b918a06sewardj{
148eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   ucontext_t uc;
158eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   char stack[8096];
168eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   volatile int done = 0;
178eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
188eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   /* Get current context. */
198eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   getcontext(&uc);
208eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   if (done) {
218eb8bab992e3998c33770b0cdb16059a8b918a06sewardj      /* Execution resumes here when print_value() returns. */
228eb8bab992e3998c33770b0cdb16059a8b918a06sewardj      return 0;
238eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   }
248eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   done = 1;
258eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
268eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   /* Setup the stack. */
278eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   uc.uc_stack.ss_sp = stack;
288eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   uc.uc_stack.ss_size = sizeof(stack);
298eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
308eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   /* Call print_value(). */
318eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   makecontext(&uc, print_value, 1, 42);
328eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   setcontext(&uc);
338eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
348eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   /* This code should not be reached. */
358eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   assert(0);
368eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   return 0;
378eb8bab992e3998c33770b0cdb16059a8b918a06sewardj}
388eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
39