Revert "crash-stack: adding fallback heuristic method for unwinding" 51/87251/2
authorKunhoon Baik <knhoon.baik@samsung.com>
Wed, 7 Sep 2016 07:03:13 +0000 (00:03 -0700)
committerKunhoon Baik <knhoon.baik@samsung.com>
Wed, 7 Sep 2016 07:10:36 +0000 (00:10 -0700)
This reverts commit f29763ccb1cf24bea7807b55ecd9722e3cb03743.

Change-Id: Id8885d5593f8e963cb8ad6e35149990168cbe33a

src/crash-stack/crash-stack-libelf.c

index f346b955089ccabe1312ab9bbe6e518bfb38f973..b152beab3c31107b407b6362e4e24a2447f85df2 100644 (file)
@@ -12,7 +12,7 @@ typedef union {
 static Register g_pc;
 static Register g_sp;
 
-#if _ELFUTILS_PREREQ(0,158)
+#if _ELFUTILS_PREREQ(0, 158)
 static int frame_callback(Dwfl_Frame *state, void *arg)
 {
        Callstack *callstack = (Callstack*)arg;
@@ -51,65 +51,17 @@ static bool is_in(const char *name, const char **names, int elems)
 
 void *get_place_for_register_value(const char *regname, int regnum)
 {
-       if (IS_IN(regname, pc_names)) return &g_pc;
-       else if (IS_IN(regname, sp_names)) return &g_sp;
+  if (IS_IN(regname, pc_names)) return &g_pc;
+  else if (IS_IN(regname, sp_names)) return &g_sp;
 
-       return 0;
-}
-
-void explore_stack_in_search_of_functions(Dwfl *dwfl, Elf *core, pid_t pid, Mappings *mappings, Callstack *callstack)
-{
-       Dwarf_Addr stack_pointer = sizeof(uintptr_t) == 4 ? g_sp.reg32 : g_sp.reg64;
-       Dwarf_Addr stack_max_lookup = stack_pointer + 8*1024*1024;
-       bool data_remaining = true;
-       do {
-               uintptr_t value;
-               data_remaining = crash_stack_libelf_read_value(dwfl, core, pid, stack_pointer, &value, sizeof(value), mappings);
-               if (data_remaining)
-               {
-                       Dwarf_Addr bias;
-                       /* check presence of address in text sections */
-                       Dwfl_Module *module = dwfl_addrmodule(dwfl, value);
-                       if (module != NULL)
-                       {
-                               Dwarf_Addr elfval = value;
-                               GElf_Sym sym;
-                               GElf_Word shndxp = -1;
-                               dwfl_module_addrsym(module, value, &sym, &shndxp);
-                               Elf_Scn *scn = dwfl_module_address_section(module, &elfval, &bias);
-                               if (scn != 0 || shndxp != -1)
-                               {
-                                       callstack->tab[callstack->elems++] = value;
-                                       if (callstack->elems >= MAX_CALLSTACK_LEN)
-                                               return;
-                               }
-                               else
-                               {
-                                       /* check also inside [pie] and [exe] */
-                                       int i;
-                                       for (i = 0; i < mappings->elems; i++)
-                                       {
-                                               if (mappings->tab[i].m_start <= elfval && elfval < mappings->tab[i].m_end)
-                                               {
-                                                       callstack->tab[callstack->elems++] = value;
-                                                       break;
-                                               }
-                                       }
-                               }
-                       }
-               }
-               stack_pointer += sizeof(uintptr_t);
-       } while (data_remaining && stack_pointer < stack_max_lookup );
+  return 0;
 }
 
 void create_crash_stack(Dwfl *dwfl, Elf *core, pid_t pid, Mappings *mappings, Callstack *callstack)
 {
        callstack->elems = 0;
-#if _ELFUTILS_PREREQ(0,158)
+#if _ELFUTILS_PREREQ(0, 158)
        dwfl_getthreads(dwfl, thread_callback, callstack);
-#else
-       callstack->tab[callstack->elems++] = sizeof(uintptr_t) == 4 ? g_pc.reg32 : g_pc.reg64;
-       explore_stack_in_search_of_functions(dwfl, core, pid, mappings, callstack);
 #endif
 }