On Fri, 2013-11-01 at 16:07 +0100, Jan Kratochvil wrote:
> That is if you generate core file, re-prelink you system (which happens
> nightly) and try to load the core file some shared libraries may no longer
> load at their right place.
> 
> It happens even during "make check" for jankratochvil/unwindx86 which I am not
> sure why now.  But the code was clearly wrong wrt prelink anyway.
> 
> Fortunately link_map->l_ld is absolute address so one can recompute new l_addr
> according to it, ignoring former link_map->l_addr.

Right, l_ld points to the dynamic section, so looking that up in the elf
file one can recompute the difference between file and memory again.

> There is no test case, though.

> libdwfl/
> 2013-11-01  Jan Kratochvil  <[email protected]>
> 
>       Fix core files for re-prelink-ed files.
>       * core-file.c (dynamic_vaddr_get): New function.
>       (dwfl_core_file_report): New variable file_dynamic_vaddr.  Call
>       dynamic_vaddr_get instead of using L_ADDR.
>       * libdwflP.h (struct r_debug_info_module): Remove field l_addr.
>       * link_map.c (report_r_debug): Do not initialize l_addr.

Looks good to me.

Thanks,

Mark

Reply via email to