Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4265ed7c authored by Christopher Ferris's avatar Christopher Ferris
Browse files

Do not do local unwinds through .oat or .dex maps.

Bug: 27391690
Change-Id: I88a49537544b507a3b0bfa61eafc27400a05281b
parent ae607e14
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -23,6 +23,7 @@
#define UNW_LOCAL_ONLY
#define UNW_LOCAL_ONLY
#include <libunwind.h>
#include <libunwind.h>


#include <android-base/strings.h>
#include <backtrace/Backtrace.h>
#include <backtrace/Backtrace.h>


#include "BacktraceLog.h"
#include "BacktraceLog.h"
@@ -124,6 +125,16 @@ bool UnwindCurrent::UnwindFromContext(size_t num_ignore_frames, ucontext_t* ucon
        num_ignore_frames--;
        num_ignore_frames--;
      }
      }
    }
    }

    // For now, do not attempt to do local unwinds through .dex, or .oat
    // maps. We can only unwind through these if there is a compressed
    // section available, almost all local unwinds are done by ART
    // which will dump the Java frames separately.
    // TODO: Come up with a flag to control this.
    if (android::base::EndsWith(frame->map.name, ".dex")
        || android::base::EndsWith(frame->map.name, ".oat")) {
      break;
    }
    ret = unw_step (cursor.get());
    ret = unw_step (cursor.get());
  } while (ret > 0 && num_frames < MAX_BACKTRACE_FRAMES);
  } while (ret > 0 && num_frames < MAX_BACKTRACE_FRAMES);