[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