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

Commit 2e829046 authored by Brigid Smith's avatar Brigid Smith
Browse files

Maps output now marks the fault address location.

If the fault address is not within a mapped region, it logs an error
message after the output.  Otherwise, it prefixes the location of the
fault address with "--->" to make it easier to locate.

Change-Id: I330adaade4402ffeb09f1a6d34a944c2f054d06d
parent a4fb975e
Loading
Loading
Loading
Loading
+13 −4
Original line number Original line Diff line number Diff line
@@ -343,8 +343,9 @@ static void dump_backtrace_and_stack(Backtrace* backtrace, log_t* log) {
  }
  }
}
}


static void dump_map(log_t* log, const backtrace_map_t* map) {
static void dump_map(log_t* log, const backtrace_map_t* map, bool fault_addr) {
  _LOG(log, logtype::MAPS, "    %" PRIPTR "-%" PRIPTR " %c%c%c %s\n", map->start, map->end,
  _LOG(log, logtype::MAPS, "%s%" PRIPTR "-%" PRIPTR " %c%c%c %s\n",
         (fault_addr? "--->" : "    "), map->start, map->end,
         (map->flags & PROT_READ) ? 'r' : '-', (map->flags & PROT_WRITE) ? 'w' : '-',
         (map->flags & PROT_READ) ? 'r' : '-', (map->flags & PROT_WRITE) ? 'w' : '-',
         (map->flags & PROT_EXEC) ? 'x' : '-', map->name.c_str());
         (map->flags & PROT_EXEC) ? 'x' : '-', map->name.c_str());
}
}
@@ -366,10 +367,18 @@ static void dump_nearby_maps(BacktraceMap* map, log_t* log, pid_t tid) {
    return;
    return;
  }
  }


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


  bool found_map = false;
  for (BacktraceMap::const_iterator it = map->begin(); it != map->end(); ++it) {
  for (BacktraceMap::const_iterator it = map->begin(); it != map->end(); ++it) {
    dump_map(log, &*it);
    bool in_map = addr >= (*it).start && addr < (*it).end;
    dump_map(log, &*it, in_map);
    if(in_map) {
      found_map = true;
    }
  }
  if(!found_map) {
    _LOG(log, logtype::ERROR, "\nFault address was not in any map!");
  }
  }
}
}