From 1001fe56dbc698d6477f4dfd7590c16b090c2456 Mon Sep 17 00:00:00 2001 From: gatieme Date: Wed, 12 Apr 2017 19:16:03 +0800 Subject: [PATCH] systemtap script code... --- .../1-systemtap_overview/1.4.1-odd_even.stp | 36 ++++++++++++++++ .../1-systemtap_overview/1.4.2-prime.stp | 41 +++++++++++++++++++ .../1-systemtap_overview/1.4.3-fibonacci.stp | 33 +++++++++++++++ .../1.6-safety_security.stp | 13 ++++++ .../show_all_kernel_func.sh | 8 ++++ .../test_mkdir.stp | 20 +++++++++ .../tools/systemtap/00-code/hello-world.stp | 2 +- 7 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 study/debug/tools/systemtap/00-code/1-systemtap_overview/1.4.1-odd_even.stp create mode 100644 study/debug/tools/systemtap/00-code/1-systemtap_overview/1.4.2-prime.stp create mode 100644 study/debug/tools/systemtap/00-code/1-systemtap_overview/1.4.3-fibonacci.stp create mode 100644 study/debug/tools/systemtap/00-code/1-systemtap_overview/1.6-safety_security.stp create mode 100644 study/debug/tools/systemtap/00-code/3-components_of_a_systemTap_script/show_all_kernel_func.sh create mode 100644 study/debug/tools/systemtap/00-code/3-components_of_a_systemTap_script/test_mkdir.stp diff --git a/study/debug/tools/systemtap/00-code/1-systemtap_overview/1.4.1-odd_even.stp b/study/debug/tools/systemtap/00-code/1-systemtap_overview/1.4.1-odd_even.stp new file mode 100644 index 0000000..d739b11 --- /dev/null +++ b/study/debug/tools/systemtap/00-code/1-systemtap_overview/1.4.1-odd_even.stp @@ -0,0 +1,36 @@ +# 1.4.1 Basic SystemTap syntax and control structures +# +# https://sourceware.org/systemtap/langref/SystemTap_overview.html#SECTION00024100000000000000 +# + +global odds, evens + +probe begin +{ + # "no" and "he" are local integers + for(i = 0; i < 10; i++) + { + if (i % 2) # 奇数odd + odds[no++] = i + else # 偶数 even + evens[ne++] = i + } + + delete odds[2] + delete evens[3] + exit() +} + + +probe end +{ + foreach (x+ in odds) + { + printf ("odds[%d] = %d\n", x, odds[x]) + } + + foreach (x in evens-) + { + printf ("evens[%d] = %d\n", x, evens[x]) + } +} diff --git a/study/debug/tools/systemtap/00-code/1-systemtap_overview/1.4.2-prime.stp b/study/debug/tools/systemtap/00-code/1-systemtap_overview/1.4.2-prime.stp new file mode 100644 index 0000000..77dd5a7 --- /dev/null +++ b/study/debug/tools/systemtap/00-code/1-systemtap_overview/1.4.2-prime.stp @@ -0,0 +1,41 @@ +#1.4.2 Primes between 0 and 49 +# +# +#https://sourceware.org/systemtap/langref/SystemTap_overview.html#SECTION00024200000000000000 +# +# + +function isprime (x) +{ + if (x < 2) + { + return 0 + } + + for (i = 2; i < x; i++) + { + if (x % i == 0) + { + return 0 + } + + if (i * i > x) + { + break + } + } + + return 1 +} + +probe begin +{ + for (i = 0; i < 50; i++) + { + if (isprime (i)) + { + printf("%d\n", i) + } + } + exit() +} diff --git a/study/debug/tools/systemtap/00-code/1-systemtap_overview/1.4.3-fibonacci.stp b/study/debug/tools/systemtap/00-code/1-systemtap_overview/1.4.3-fibonacci.stp new file mode 100644 index 0000000..aabac4f --- /dev/null +++ b/study/debug/tools/systemtap/00-code/1-systemtap_overview/1.4.3-fibonacci.stp @@ -0,0 +1,33 @@ +#1.4.2 Primes between 0 and 49 +# +#https://sourceware.org/systemtap/langref/SystemTap_overview.html#SECTION00024300000000000000 +# +# + +function fibonacci(i) +{ + if (i < 1) + { + error ("bad number"); + } + + if (i == 1) + { + return 1; + } + if (i == 2) + { + return 2; + } + + return fibonacci (i - 1) + fibonacci (i - 2); +} + +probe begin +{ + for(i = 1; i <= 11; i++) + { + printf ("%2dth fibonacci number: %4d\n", i, fibonacci(i)); + } + exit() +} diff --git a/study/debug/tools/systemtap/00-code/1-systemtap_overview/1.6-safety_security.stp b/study/debug/tools/systemtap/00-code/1-systemtap_overview/1.6-safety_security.stp new file mode 100644 index 0000000..27c0f79 --- /dev/null +++ b/study/debug/tools/systemtap/00-code/1-systemtap_overview/1.6-safety_security.stp @@ -0,0 +1,13 @@ +#1.6 Safety and security +# +#https://sourceware.org/systemtap/langref/SystemTap_overview.html#SECTION00026000000000000000 +# +# + +probe begin +{ + printf("MAXENSTING = %d\n", MAXNESTING); + printf("MAXSTRINGLEN= %d\n", MAXSTRINGLEN); + exit( ); +} + diff --git a/study/debug/tools/systemtap/00-code/3-components_of_a_systemTap_script/show_all_kernel_func.sh b/study/debug/tools/systemtap/00-code/3-components_of_a_systemTap_script/show_all_kernel_func.sh new file mode 100644 index 0000000..9a24aa1 --- /dev/null +++ b/study/debug/tools/systemtap/00-code/3-components_of_a_systemTap_script/show_all_kernel_func.sh @@ -0,0 +1,8 @@ +pattern="*" +if [ $# -gt 2 ]; then + echo "usage $0 [pattern]" +elif [ $# -eq 0 ]; then + stap -l 'kernel.function("*")' | sort +elif [ $# -eq 1 ]; then + stap -l 'kernel.function("*")' | sort | grep $1 +fi diff --git a/study/debug/tools/systemtap/00-code/3-components_of_a_systemTap_script/test_mkdir.stp b/study/debug/tools/systemtap/00-code/3-components_of_a_systemTap_script/test_mkdir.stp new file mode 100644 index 0000000..4336688 --- /dev/null +++ b/study/debug/tools/systemtap/00-code/3-components_of_a_systemTap_script/test_mkdir.stp @@ -0,0 +1,20 @@ + +probe kernel.function("sys_mkdir").call +{ + printf("enter %s\n", $pathname); +} + +probe kernel.function("sys_mkdir").return +{ + printf("exit %s\n", $pathname); +} + +probe begin +{ + printf("test mkdir begin\n"); +} + +probe end +{ + printf("test mkdir end\n"); +} diff --git a/study/debug/tools/systemtap/00-code/hello-world.stp b/study/debug/tools/systemtap/00-code/hello-world.stp index 33fc1ee..c548172 100644 --- a/study/debug/tools/systemtap/00-code/hello-world.stp +++ b/study/debug/tools/systemtap/00-code/hello-world.stp @@ -1,6 +1,6 @@ probe begin { - print("Hello Wordl\n") + print("Hello World\n") exit() }