[Mesa-dev] [PATCH] util: Query build-id by symbol address, not library name
Emil Velikov
emil.l.velikov at gmail.com
Wed Sep 13 12:28:23 UTC 2017
Hi Chad,
On 13 September 2017 at 01:05, Chad Versace <chad at kiwitree.net> wrote:
> This patch renames build_id_find_nhdr() to
> build_id_find_nhdr_for_addr(), and changes it to never examine the
> library name.
>
> Tested on Fedora by confirming that build_id_get_data() returns the same
> build-id as the file(1) tool. For BSD, I confirmed that the API used
> (dladdr() and struct Dl_info) is documented in FreeBSD's manpages.
>
Had a look for potential issues and only ElfW() shows up. Since we
already have a solution for it in-tree, Open/Free/NetBSD should be
fine. Potentially even Darwin and Solaris ;-)
> This solves several problems, some more realistic than others:
>
> - We can now the query the build-id without knowing the installed library's
> filename.
>
> This matters because Android requires specific filenames for HAL
> modules, such as "/vendor/lib/hw/vulkan.${board}.so". The HAL
> filenames do not follow the Unix convention of "libfoo.so". In
> other words, the same query code will now work on Linux and Android.
>
> - Querying the build-id now works correctly when the process
> contains multiple shared objects with the same basename.
> (Admittedly, this is a highly unlikely scenario).
>
> - Querying the build-id now works correctly when the library is
> statically linked into the executable. (This even more unlikely
> than the previous scenario).
>
Have to agree with Matt here - I don't think build-id is present for
static libraries.
That said, patch looks great
Reviewed-by: Emil Velikov <emil.velikov at collabora.com>
-Emil
More information about the mesa-dev
mailing list