view longjump.c @ 16:6ec369858a50 default tip

aua
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Fri, 24 Jan 2014 00:10:05 +0900
parents dee9711aeb06
children
line wrap: on
line source

#include <stdio.h>
#include <setjmp.h>
#include <stdlib.h>

__attribute__((noinline))
__code code1(void *__return,void *__enviroment){
    void(*ret)(void *);
    printf("code1\n");
    ret = (void(*)(void *))__return;
    ret(__enviroment);
}

void *return1 (void* env){
    printf("return1\n");
    longjmp(*(jmp_buf*)env,1);
}

void main1 (){
    void *__return;
    void *__enviroment;
    printf("main1 entry\n");
    __enviroment = (void*)malloc(sizeof(jmp_buf));
    if (setjmp(__enviroment)){
        free(__enviroment);
        printf("main1 return\n");
        return;
    }
    __return = (void*)return1;
    goto code1(__return,__enviroment);
}

int main (){
    main1();
    printf("returned\n");
    return 1;
}