diff options
author | Timothy Arceri <[email protected]> | 2018-09-19 11:44:12 +1000 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2018-10-03 09:49:21 +1000 |
commit | 83ea8dd99bb16e5d9bb880e64cd2047abc536b70 (patch) | |
tree | 8edd3d176fa8d553ab6396d54adb3cd8d13b01cb /src/util/disk_cache.h | |
parent | 6a884014e46ab0ccca5c900f692898ffb02469e6 (diff) |
util: add disk_cache_get_function_identifier()
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 <[email protected]>
Diffstat (limited to 'src/util/disk_cache.h')
-rw-r--r-- | src/util/disk_cache.h | 16 |
1 files changed, 16 insertions, 0 deletions
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 <dlfcn.h> #include <stdio.h> +#include "util/build_id.h" #endif #include <assert.h> #include <stdint.h> @@ -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. */ |