The gdb normalization is left in normalize.c as some of the code/data may be shared with core normalization when it is implemented.
Signed-off-by: Martin Milata mmilata@redhat.com --- include/koops/stacktrace.h | 3 +++ include/normalize.h | 7 ------ lib/koops_stacktrace.c | 60 ++++++++++++++++++++++++++++++++++++++++++++ lib/normalize.c | 62 ---------------------------------------------- 4 files changed, 63 insertions(+), 69 deletions(-)
diff --git a/include/koops/stacktrace.h b/include/koops/stacktrace.h index 4aa545e..9d76cab 100644 --- a/include/koops/stacktrace.h +++ b/include/koops/stacktrace.h @@ -159,6 +159,9 @@ sr_koops_stacktrace_get_reason(struct sr_koops_stacktrace *stacktrace); char * sr_koops_stacktrace_to_json(struct sr_koops_stacktrace *stacktrace);
+void +sr_normalize_koops_stacktrace(struct sr_koops_stacktrace *stacktrace); +
#ifdef __cplusplus } diff --git a/include/normalize.h b/include/normalize.h index c93595f..a595cb9 100644 --- a/include/normalize.h +++ b/include/normalize.h @@ -36,10 +36,6 @@ extern "C" { struct sr_gdb_frame; struct sr_gdb_thread; struct sr_gdb_stacktrace; -struct sr_core_frame; -struct sr_core_thread; -struct sr_core_stacktrace; -struct sr_koops_stacktrace;
void sr_normalize_gdb_thread(struct sr_gdb_thread *thread); @@ -47,9 +43,6 @@ sr_normalize_gdb_thread(struct sr_gdb_thread *thread); void sr_normalize_gdb_stacktrace(struct sr_gdb_stacktrace *stacktrace);
-void -sr_normalize_koops_stacktrace(struct sr_koops_stacktrace *stacktrace); - // TODO: move to gdb_stacktrace.h /** * Checks whether the thread it contains some function used to exit diff --git a/lib/koops_stacktrace.c b/lib/koops_stacktrace.c index 95ae344..0533034 100644 --- a/lib/koops_stacktrace.c +++ b/lib/koops_stacktrace.c @@ -559,3 +559,63 @@ koops_append_bthash_text(struct sr_koops_stacktrace *stacktrace,
sr_strbuf_append_char(strbuf, '\n'); } + +void +sr_normalize_koops_stacktrace(struct sr_koops_stacktrace *stacktrace) +{ + /* Normalize function names by removing the suffixes identified by + * the dot character. + */ + struct sr_koops_frame *frame = stacktrace->frames; + while (frame) + { + if (frame->function_name) + { + char *dot = strchr(frame->function_name, '.'); + if (dot) + *dot = '\0'; + } + + frame = frame->next; + } + + /* Remove blacklisted frames. */ + /* !!! MUST BE SORTED !!! */ + const char *blacklist[] = { + "do_softirq", + "do_vfs_ioctl", + "flush_kthread_worker", + "gs_change", + "irq_exit", + "kernel_thread_helper", + "kthread", + "process_one_work", + "system_call_fastpath", + "warn_slowpath_common", + "warn_slowpath_fmt", + "warn_slowpath_fmt_taint", + "warn_slowpath_null", + "worker_thread" + }; + + frame = stacktrace->frames; + while (frame) + { + struct sr_koops_frame *next_frame = frame->next; + + bool in_blacklist = bsearch(&frame->function_name, + blacklist, + sizeof(blacklist) / sizeof(blacklist[0]), + sizeof(blacklist[0]), + sr_ptrstrcmp); + + /* do not drop frames belonging to a module */ + if (!frame->module_name && in_blacklist) + { + bool success = sr_koops_stacktrace_remove_frame(stacktrace, frame); + assert(success || !"failed to remove frame"); + } + + frame = next_frame; + } +} diff --git a/lib/normalize.c b/lib/normalize.c index 7cd8144..6a8c351 100644 --- a/lib/normalize.c +++ b/lib/normalize.c @@ -21,8 +21,6 @@ #include "gdb/frame.h" #include "gdb/thread.h" #include "gdb/stacktrace.h" -#include "koops/frame.h" -#include "koops/stacktrace.h" #include "utils.h" #include <string.h> #include <assert.h> @@ -380,66 +378,6 @@ sr_normalize_gdb_stacktrace(struct sr_gdb_stacktrace *stacktrace) } }
-void -sr_normalize_koops_stacktrace(struct sr_koops_stacktrace *stacktrace) -{ - /* Normalize function names by removing the suffixes identified by - * the dot character. - */ - struct sr_koops_frame *frame = stacktrace->frames; - while (frame) - { - if (frame->function_name) - { - char *dot = strchr(frame->function_name, '.'); - if (dot) - *dot = '\0'; - } - - frame = frame->next; - } - - /* Remove blacklisted frames. */ - /* !!! MUST BE SORTED !!! */ - const char *blacklist[] = { - "do_softirq", - "do_vfs_ioctl", - "flush_kthread_worker", - "gs_change", - "irq_exit", - "kernel_thread_helper", - "kthread", - "process_one_work", - "system_call_fastpath", - "warn_slowpath_common", - "warn_slowpath_fmt", - "warn_slowpath_fmt_taint", - "warn_slowpath_null", - "worker_thread" - }; - - frame = stacktrace->frames; - while (frame) - { - struct sr_koops_frame *next_frame = frame->next; - - bool in_blacklist = bsearch(&frame->function_name, - blacklist, - sizeof(blacklist) / sizeof(blacklist[0]), - sizeof(blacklist[0]), - sr_ptrstrcmp); - - /* do not drop frames belonging to a module */ - if (!frame->module_name && in_blacklist) - { - bool success = sr_koops_stacktrace_remove_frame(stacktrace, frame); - assert(success || !"failed to remove frame"); - } - - frame = next_frame; - } -} - static bool next_functions_similar(struct sr_gdb_frame *frame1, struct sr_gdb_frame *frame2)