From 83ea8dd99bb16e5d9bb880e64cd2047abc536b70 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Wed, 19 Sep 2018 11:44:12 +1000 Subject: [PATCH] util: add disk_cache_get_function_identifier() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This can be used as a drop in replacement for disk_cache_get_function_timestamp(). Here we use build-id to generate a driver-id rather than build timestamp if available. This should resolve issues such as distros using reproducable builds and flatpak not having real build timestamps. Reviewed-by: Marek Olšák --- src/util/disk_cache.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/util/disk_cache.h b/src/util/disk_cache.h index c8685a53ed3..3129de8ec9d 100644 --- a/src/util/disk_cache.h +++ b/src/util/disk_cache.h @@ -27,6 +27,7 @@ #ifdef HAVE_DLFCN_H #include #include +#include "util/build_id.h" #endif #include #include @@ -112,6 +113,21 @@ disk_cache_get_function_timestamp(void *ptr, uint32_t* timestamp) return true; } + +static inline bool +disk_cache_get_function_identifier(void *ptr, uint32_t *id) +{ +#ifdef HAVE_DL_ITERATE_PHDR + const struct build_id_note *note = NULL; + if ((note = build_id_find_nhdr_for_addr(ptr))) { + const uint8_t *id_sha1 = build_id_data(note); + assert(id_sha1); + *id = *id_sha1; + return true; + } else +#endif + return disk_cache_get_function_timestamp(ptr, id); +} #endif /* Provide inlined stub functions if the shader cache is disabled. */ -- 2.30.2