I've got a few cores where report_r_debug() in link_map.c fails to find all of 
the modules - for example I had libc.so missing. This obviously meant that 
elfutils could not backtrace my core.

It seems to be related to this code:

  /* There can't be more elements in the link_map list than there are
     segments.  DWFL->lookup_elts is probably twice that number, so it
     is certainly above the upper bound.  If we iterate too many times,
     there must be a loop in the pointers due to link_map clobberation.  */
  size_t iterations = 0;

  while (next != 0 && ++iterations < dwfl->lookup_elts)

I've changed this to just keep going until it reaches dwfl->lookup_elts*5, 
which seems to "fix" it, but I feel there must be a better fix!

The most recent core I saw with this had lookup_elts=36, and hit 109 iterations 
of the loop and then backtraced just fine.

Thanks!
Luke

Reply via email to