test:test51 add a few more tests for calling setcontext.
Change-Id: I272ac01c77537b80bab328aae1acd7b6ce6027fb
This commit is contained in:
parent
1035348df8
commit
0673998dad
1 changed files with 49 additions and 4 deletions
|
@ -13,11 +13,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ucontext.h>
|
#include <ucontext.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#ifndef __arm__
|
|
||||||
#include <fenv.h>
|
#include <fenv.h>
|
||||||
#else
|
|
||||||
#include <ieeefp.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <sys/signal.h>
|
#include <sys/signal.h>
|
||||||
|
|
||||||
|
@ -200,6 +196,19 @@ void verify_main_reenter(void)
|
||||||
if (reentered_main == 0) err(4, 1);
|
if (reentered_main == 0) err(4, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int set_context_test_value;
|
||||||
|
void set_context_test_thread1(void){
|
||||||
|
set_context_test_value |= 0x1;
|
||||||
|
setcontext(&ctx[2]);
|
||||||
|
err(1, 24);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_context_test_thread2(void){
|
||||||
|
set_context_test_value |= 0x1 << 1;
|
||||||
|
setcontext(&ctx[0]);
|
||||||
|
err(1, 23);
|
||||||
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
@ -317,6 +326,42 @@ int main(void)
|
||||||
makecontext(&ctx[2], (void (*) (void)) do_child, 0);
|
makecontext(&ctx[2], (void (*) (void)) do_child, 0);
|
||||||
if (swapcontext(&ctx[0], &ctx[2]) == -1) err(1, 16);
|
if (swapcontext(&ctx[0], &ctx[2]) == -1) err(1, 16);
|
||||||
|
|
||||||
|
/* test setcontext first do some cleanup */
|
||||||
|
|
||||||
|
free(ctx[1].uc_stack.ss_sp);
|
||||||
|
free(ctx[2].uc_stack.ss_sp);
|
||||||
|
|
||||||
|
memset(&ctx[0],0,sizeof(ucontext_t));
|
||||||
|
memset(&ctx[1],0,sizeof(ucontext_t));
|
||||||
|
memset(&ctx[2],0,sizeof(ucontext_t));
|
||||||
|
|
||||||
|
|
||||||
|
/* create 3 new contexts */
|
||||||
|
volatile int cb =1;
|
||||||
|
|
||||||
|
/* control will be returned here */
|
||||||
|
set_context_test_value = 0;
|
||||||
|
if (getcontext(&ctx[0]) != 0) err(1, 17);
|
||||||
|
if (set_context_test_value != 0x3) err(1, 20);
|
||||||
|
if (cb == 1) {
|
||||||
|
cb =0;
|
||||||
|
if (getcontext(&ctx[1]) != 0) err(1, 18);
|
||||||
|
if (getcontext(&ctx[2]) != 0) err(1, 19);
|
||||||
|
|
||||||
|
// allocate new stacks */
|
||||||
|
ctx[1].uc_stack.ss_sp = malloc(SSIZE);
|
||||||
|
ctx[1].uc_stack.ss_size = SSIZE;
|
||||||
|
ctx[2].uc_stack.ss_sp = malloc(SSIZE);
|
||||||
|
ctx[2].uc_stack.ss_size = SSIZE;
|
||||||
|
|
||||||
|
makecontext(&ctx[1],set_context_test_thread1,0);
|
||||||
|
makecontext(&ctx[2],set_context_test_thread2,0);
|
||||||
|
if( setcontext(&ctx[1]) != 0){
|
||||||
|
err(1, 21);
|
||||||
|
}
|
||||||
|
err(1, 22);
|
||||||
|
}
|
||||||
|
|
||||||
quit();
|
quit();
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue