summaryrefslogtreecommitdiffstats
path: root/testsuite/systemtap.base/bz5274.c
blob: 4e4cfb169bf92b544e71e286ac12821bb4160d12 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <setjmp.h>
#include <stdio.h>
#include <stdlib.h>

void funcd(int i, jmp_buf env)
{
	printf("In %s: %s :%d : i=%d.  Calling longjmp\n", "bz5274.c",__func__,__LINE__,i);
	longjmp(env, i);
}

void funcc(int i, jmp_buf env)
{
	printf("In %s: %s :%d : i=%d.  Calling funcd\n", "bz5274.c",__func__,__LINE__,i);
	funcd(i,env);
}


void funcb(int i, jmp_buf env)
{
	printf("In %s: %s :%d : i=%d.  Calling funcc\n", "bz5274.c",__func__,__LINE__,i);
	funcc(i,env);
}


void funca(char *s, jmp_buf env)
{
	int i;

	i = setjmp(env);
	if (i == 4)
		return;
	funcb(++i, env);
	return;
}



int main(int argc, char **argv)
{
	jmp_buf env;

	funca("Hello World", env);
	exit(0);
}