Hitting g dwfl->lookup_elts limit in report_r_debug, so not all modules show up and backtracing fails
Florian Weimer
fweimer@redhat.com
Tue May 2 07:57:59 GMT 2023
* Luke Diamand via Elfutils-devel:
> 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.
It's probably another fallout from -z separate-code, which tends to
create four LOAD segments. The magic number 5 sounds about right, as
gold also has -z text-unlikely-segment, which might result in creating
that number of load segments (but I haven't tried).
Thanks,
Florian
More information about the Elfutils-devel
mailing list