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

Commit b035a19e authored by Christopher Ferris's avatar Christopher Ferris Committed by Andreas Gampe
Browse files

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

Bug: 27391690

(cherry picked from commit 4265ed7c)

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

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

#include "BacktraceLog.h"
@@ -124,6 +125,16 @@ bool UnwindCurrent::UnwindFromContext(size_t num_ignore_frames, ucontext_t* ucon
        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());
  } while (ret > 0 && num_frames < MAX_BACKTRACE_FRAMES);