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

Commit 2f40ddf3 authored by Dmitriy Ivanov's avatar Dmitriy Ivanov Committed by Gerrit Code Review
Browse files

Merge "Do not suppress maps dump when si_addr<PAGE_SIZE"

parents 56b28f6b f10aa3ae
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ static bool signal_has_si_addr(int sig) {
    case SIGFPE:
    case SIGILL:
    case SIGSEGV:
    case SIGTRAP:
      return true;
    default:
      return false;
@@ -350,16 +351,12 @@ static void dump_nearby_maps(BacktraceMap* map, log_t* log, pid_t tid) {
    return;
  }

  bool is_running = (si.si_code == SI_USER);
  bool has_fault_address = signal_has_si_addr(si.si_signo);
  uintptr_t addr = reinterpret_cast<uintptr_t>(si.si_addr);
  addr &= ~0xfff;     // round to 4K page boundary
  if (!is_running && addr == 0) {    // null-pointer deref
    return;
  }

  _LOG(log, logtype::MAPS, "\nmemory map: %s\n", is_running? "" : "(fault address prefixed with --->)");
  _LOG(log, logtype::MAPS, "\nmemory map: %s\n", has_fault_address ? "(fault address prefixed with --->)" : "");

  if(!is_running && (addr < map->begin()->start)) {
  if (has_fault_address && (addr < map->begin()->start)) {
    _LOG(log, logtype::MAPS, "--->Fault address falls at %" PRIPTR " before any mapped regions\n", addr);
  }

@@ -369,10 +366,10 @@ static void dump_nearby_maps(BacktraceMap* map, log_t* log, pid_t tid) {
      _LOG(log, logtype::MAPS, "--->Fault address falls at %" PRIPTR " between mapped regions\n", addr);
    }
    prev = it;
    bool in_map = !is_running && (addr >= (*it).start) && (addr < (*it).end);
    bool in_map = has_fault_address && (addr >= (*it).start) && (addr < (*it).end);
    dump_map(log, &*it, in_map);
  }
  if (!is_running && (addr >= (*prev).end)) {
  if (has_fault_address && (addr >= (*prev).end)) {
    _LOG(log, logtype::MAPS, "--->Fault address falls at %" PRIPTR " after any mapped regions\n", addr);
  }
}