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