From 4d4e840209ddf1c86faf5381a38c7448ec6d355b Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 10 Nov 2014 15:22:30 +0800 Subject: [PATCH] research st, add jmp_flow. --- trunk/research/arm/jmp_flow.cpp | 27 +++++++++++++++++++++++++++ trunk/research/arm/jmp_sp.cpp | 3 ++- 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 trunk/research/arm/jmp_flow.cpp diff --git a/trunk/research/arm/jmp_flow.cpp b/trunk/research/arm/jmp_flow.cpp new file mode 100644 index 000000000..58e734c8b --- /dev/null +++ b/trunk/research/arm/jmp_flow.cpp @@ -0,0 +1,27 @@ +/* +# for all supports setjmp and longjmp: + g++ -g -O0 -o jmp_flow jmp_flow.cpp +*/ +#include +#include +#include + +jmp_buf context_level_0; + +void func_level_0() +{ + const char* level_0_0 = "stack variables for func_level_0"; + int ret = setjmp(context_level_0); + printf("func_level_0 ret=%d\n", ret); + if (ret != 0) { + printf("call by longjmp.\n"); + exit(0); + } +} + +int main(int argc, char** argv) +{ + func_level_0(); + longjmp(context_level_0, 1); + return 0; +} diff --git a/trunk/research/arm/jmp_sp.cpp b/trunk/research/arm/jmp_sp.cpp index d5d1dea09..884887e71 100644 --- a/trunk/research/arm/jmp_sp.cpp +++ b/trunk/research/arm/jmp_sp.cpp @@ -133,7 +133,8 @@ void func0() #endif } -int main(int argc, char** argv) { +int main(int argc, char** argv) +{ #if defined(__amd64__) || defined(__x86_64__) printf("x86_64 sizeof(long int)=%d, sizeof(long)=%d, " "sizeof(int)=%d, __WORDSIZE=%d, __GLIBC__=%d, __GLIBC_MINOR__=%d\n",