util: Query build-id by symbol address, not library name
authorChad Versace <chadversary@chromium.org>
Tue, 12 Sep 2017 22:52:03 +0000 (15:52 -0700)
committerChad Versace <chadversary@chromium.org>
Wed, 13 Sep 2017 16:49:27 +0000 (09:49 -0700)
commit5c98d3825ccbed9054a1bb2de607116b2b31d48b
tree08eb6cc0beb3e572b48d28f59977a878646a412b
parentc8db134e4deed596a67d9daa1827feca76d5c4c4
util: Query build-id by symbol address, not library name

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 two problems:

    - 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).

Cc: Jonathan Gray <jsg@jsg.id.au>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
src/intel/vulkan/anv_device.c
src/util/build_id.c
src/util/build_id.h