[Mesa-dev] [PATCH] util: Query build-id by symbol address, not library name

Matt Turner mattst88 at gmail.com
Wed Sep 13 00:19:48 UTC 2017


On Tue, Sep 12, 2017 at 5:05 PM, 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.
>
> 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).

I assume this one is speculative? I'm not sure how the build-id ELF
section could exist in a static archive, and I'm not sure how it could
end up in a statically linked binary (much less more than one of
them).

Otherwise, it looks like a nice change.

Reviewed-by: Matt Turner <mattst88 at gmail.com>


More information about the mesa-dev mailing list